Skip to content

Commit 2aab3d5

Browse files
authored
Merge pull request #70 from ngageoint/develop
Release v2.1.9 Fixes for file and camera permissions on android 13 Fix for show my location
2 parents aecdb50 + be0dc99 commit 2aab3d5

File tree

4 files changed

+80
-51
lines changed

4 files changed

+80
-51
lines changed

mapcache/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ android {
1515
resValue "string", "applicationId", applicationId
1616
minSdkVersion 28
1717
targetSdkVersion 33
18-
versionCode 55
19-
versionName '2.1.8'
18+
versionCode 56
19+
versionName '2.1.9'
2020
multiDexEnabled true
2121
}
2222
buildTypes {

mapcache/src/main/java/mil/nga/mapcache/GeoPackageMapFragment.java

Lines changed: 51 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ public class GeoPackageMapFragment extends Fragment implements
266266
/**
267267
* True when the location is shown on the map.
268268
*/
269-
private static boolean locationVisible = false;
269+
private boolean locationVisible = false;
270270

271271
/**
272272
* True when we are showing bearing on the map
@@ -1422,11 +1422,27 @@ private void showMyLocation() {
14221422
} else {
14231423
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MainActivity.MAP_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
14241424
}
1425+
} else {
1426+
// Only zoom when turning location on, not when hiding it
1427+
if (locationVisible) {
1428+
zoomToMyLocation();
1429+
}
14251430
}
1426-
// Only zoom when turning location on, not when hiding it
1427-
if (locationVisible) {
1428-
zoomToMyLocation();
1431+
}
1432+
1433+
/**
1434+
* Set the my location enabled state on the map if permission has been granted
1435+
*
1436+
* @return true if updated, false if permission is required
1437+
*/
1438+
public boolean setMyLocationEnabled() {
1439+
boolean updated = false;
1440+
if (map != null && getActivity() != null && ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
1441+
map.setMyLocationEnabled(locationVisible);
1442+
updated = true;
1443+
map.getUiSettings().setMyLocationButtonEnabled(false);
14291444
}
1445+
return updated;
14301446
}
14311447

14321448
/**
@@ -1870,22 +1886,42 @@ this, getActivity(), getContext(), this,
18701886
*/
18711887
private void getImportPermissions(int returnCode) {
18721888
if (getActivity() != null) {
1873-
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
1874-
new AlertDialog.Builder(getActivity(), R.style.AppCompatAlertDialogStyle)
1875-
.setTitle(R.string.storage_access_rational_title)
1876-
.setMessage(R.string.storage_access_rational_message)
1877-
.setPositiveButton(android.R.string.ok, (DialogInterface dialog, int which) ->
1878-
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, returnCode)
1879-
)
1880-
.create()
1881-
.show();
1882-
1889+
//TODO: update permissions to remove Write external storage permissions
1890+
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
1891+
executeRequestCode(returnCode);
18831892
} else {
1884-
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, returnCode);
1893+
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
1894+
new AlertDialog.Builder(getActivity(), R.style.AppCompatAlertDialogStyle)
1895+
.setTitle(R.string.storage_access_rational_title)
1896+
.setMessage(R.string.storage_access_rational_message)
1897+
.setPositiveButton(android.R.string.ok, (DialogInterface dialog, int which) ->
1898+
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, returnCode)
1899+
)
1900+
.create()
1901+
.show();
1902+
1903+
} else {
1904+
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, returnCode);
1905+
}
18851906
}
18861907
}
18871908
}
18881909

1910+
/**
1911+
* Force execution of given request code option without permissions
1912+
* @param requestCode request code matching MainActivity onRequestPermissionsResult functions
1913+
*/
1914+
private void executeRequestCode(int requestCode){
1915+
switch (requestCode) {
1916+
case MainActivity.MANAGER_PERMISSIONS_REQUEST_ACCESS_IMPORT_EXTERNAL:
1917+
importGeopackageFromFile();
1918+
break;
1919+
case MainActivity.MANAGER_PERMISSIONS_REQUEST_ACCESS_EXPORT_DATABASE:
1920+
exportGeoPackageToExternal();
1921+
break;
1922+
}
1923+
}
1924+
18891925

18901926
/**
18911927
* Import a GeoPackage from a file (after we've been given permission)
@@ -2705,9 +2741,6 @@ private void saveEditFeatures() {
27052741
*/
27062742
@Override
27072743
public void onResume() {
2708-
if (locationVisible) {
2709-
showMyLocation();
2710-
}
27112744
super.onResume();
27122745
}
27132746

@@ -2754,20 +2787,6 @@ public void onHiddenChanged(boolean hidden) {
27542787
}
27552788
}
27562789

2757-
/**
2758-
* Set the my location enabled state on the map if permission has been granted
2759-
*
2760-
* @return true if updated, false if permission is required
2761-
*/
2762-
public boolean setMyLocationEnabled() {
2763-
boolean updated = false;
2764-
if (map != null && getActivity() != null && ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
2765-
map.setMyLocationEnabled(locationVisible);
2766-
updated = true;
2767-
map.getUiSettings().setMyLocationButtonEnabled(false);
2768-
}
2769-
return updated;
2770-
}
27712790

27722791
/**
27732792
* Handle map menu clicks

mapcache/src/main/java/mil/nga/mapcache/view/map/feature/FeatureViewActivity.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.graphics.BitmapFactory;
1212
import android.media.Image;
1313
import android.net.Uri;
14+
import android.os.Build;
1415
import android.os.Bundle;
1516
import android.os.ParcelFileDescriptor;
1617
import android.provider.MediaStore;
@@ -523,7 +524,7 @@ private Bitmap getImageResult(Uri uri){
523524

524525

525526
/**
526-
* Check permissions for camera use
527+
* Check permissions for camera use. Note, only check write_external if < android 10
527528
*/
528529
public static boolean checkAndRequestPermissions(final Activity context) {
529530
int writeExternalPermission = ContextCompat.checkSelfPermission(context,
@@ -534,9 +535,11 @@ public static boolean checkAndRequestPermissions(final Activity context) {
534535
if (cameraPermission != PackageManager.PERMISSION_GRANTED) {
535536
listPermissionsNeeded.add(Manifest.permission.CAMERA);
536537
}
537-
if (writeExternalPermission != PackageManager.PERMISSION_GRANTED) {
538-
listPermissionsNeeded
539-
.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
538+
if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q){
539+
if (writeExternalPermission != PackageManager.PERMISSION_GRANTED) {
540+
listPermissionsNeeded
541+
.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
542+
}
540543
}
541544
if (!listPermissionsNeeded.isEmpty()) {
542545
ActivityCompat.requestPermissions(context, listPermissionsNeeded
@@ -555,19 +558,26 @@ public static boolean checkAndRequestPermissions(final Activity context) {
555558
@Override
556559
public void onRequestPermissionsResult(int requestCode, @NotNull String[] permissions, @NotNull int[] grantResults) {
557560
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
561+
boolean flagged = false;
558562
if (requestCode == REQUEST_ID_MULTIPLE_PERMISSIONS) {
559563
if (ContextCompat.checkSelfPermission(FeatureViewActivity.this,
560564
Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
561565
Toast.makeText(getApplicationContext(),
562-
"FlagUp Requires Access to Camara.", Toast.LENGTH_SHORT)
566+
"Camera permissions required", Toast.LENGTH_SHORT)
563567
.show();
564-
565-
} else if (ContextCompat.checkSelfPermission(FeatureViewActivity.this,
566-
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
567-
Toast.makeText(getApplicationContext(),
568-
"FlagUp Requires Access to Your Storage.",
569-
Toast.LENGTH_SHORT).show();
570-
} else {
568+
flagged = true;
569+
}
570+
if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
571+
if (ContextCompat.checkSelfPermission(FeatureViewActivity.this,
572+
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
573+
Toast.makeText(getApplicationContext(),
574+
"Storage permissions required",
575+
Toast.LENGTH_SHORT).show();
576+
flagged = true;
577+
578+
}
579+
}
580+
if(!flagged) {
571581
takePicture();
572582
}
573583
}

mapcache/src/main/res/values/strings.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
<resources>
33

44
<string name="app_name">MapCache</string>
5-
<string name="app_version">Version 2.1.8</string>
6-
<string name="app_release_date">Released Aug 2023</string>
5+
<string name="app_version">Version 2.1.9</string>
6+
<string name="app_release_date">Released Sept 2023</string>
77
<string name="app_label_name">MapCache</string>
88
<string name="title_map">Map</string>
99
<string name="title_manager">Manager</string>
@@ -386,9 +386,9 @@
386386
<string name="geopackage_android_url">&lt;a href=http://ngageoint.github.io/geopackage-android>GeoPackage Android on Github&lt;/a></string>
387387
<string name="ogc_url">&lt;a href=http://www.geopackage.org/#implementations_nga>OGC GeoPackage&lt;/a></string>
388388
<string name="release_notes">
389-
Release Notes - 2.1.8\n \n
390-
- Backend performance improvements\n
391-
- Usability enhancements
389+
Release Notes - 2.1.9\n \n
390+
- Fixes for file and camera permissions on android 13\n
391+
- Fix for show my location
392392
</string>
393393

394394

0 commit comments

Comments
 (0)