mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 21:03:54 +01:00
Resolves Issue #5413 Crash when opening Nearby when location permission hasn't been granted yet (#5418)
* Resolves Issue #5413 * Added Javadoc and formatted code
This commit is contained in:
parent
71de19f27b
commit
8222c4a42c
1 changed files with 44 additions and 35 deletions
|
|
@ -304,37 +304,28 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
|||
}
|
||||
});
|
||||
|
||||
private ActivityResultLauncher<String[]> locationPermissionLauncher = registerForActivityResult(
|
||||
new ActivityResultContracts.RequestMultiplePermissions(),
|
||||
new ActivityResultCallback<Map<String, Boolean>>() {
|
||||
@Override
|
||||
public void onActivityResult(Map<String, Boolean> result) {
|
||||
boolean areAllGranted = true;
|
||||
for (final boolean b : result.values()) {
|
||||
areAllGranted = areAllGranted && b;
|
||||
}
|
||||
|
||||
if (areAllGranted) {
|
||||
locationPermissionGranted();
|
||||
private ActivityResultLauncher<String> locationPermissionLauncher = registerForActivityResult(
|
||||
new ActivityResultContracts.RequestPermission(), isGranted -> {
|
||||
if (isGranted) {
|
||||
locationPermissionGranted();
|
||||
} else {
|
||||
if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
|
||||
DialogUtil.showAlertDialog(getActivity(),
|
||||
getActivity().getString(R.string.location_permission_title),
|
||||
getActivity().getString(R.string.location_permission_rationale_nearby),
|
||||
getActivity().getString(android.R.string.ok),
|
||||
getActivity().getString(android.R.string.cancel),
|
||||
() -> {
|
||||
if (!(locationManager.isNetworkProviderEnabled()
|
||||
|| locationManager.isGPSProviderEnabled())) {
|
||||
showLocationOffDialog();
|
||||
}
|
||||
},
|
||||
() -> isPermissionDenied = true,
|
||||
null,
|
||||
false);
|
||||
} else {
|
||||
if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
|
||||
DialogUtil.showAlertDialog(getActivity(),
|
||||
getActivity().getString(R.string.location_permission_title),
|
||||
getActivity().getString(R.string.location_permission_rationale_nearby),
|
||||
getActivity().getString(android.R.string.ok),
|
||||
getActivity().getString(android.R.string.cancel),
|
||||
() -> {
|
||||
if (!(locationManager.isNetworkProviderEnabled()
|
||||
|| locationManager.isGPSProviderEnabled())) {
|
||||
showLocationOffDialog();
|
||||
}
|
||||
},
|
||||
() -> isPermissionDenied = true,
|
||||
null,
|
||||
false);
|
||||
} else {
|
||||
isPermissionDenied = true;
|
||||
}
|
||||
isPermissionDenied = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -1037,10 +1028,28 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
|||
return latLng;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes location where map should be centered
|
||||
*
|
||||
* @return returns the last location, if available, else returns default location
|
||||
*/
|
||||
@Override
|
||||
public fr.free.nrw.commons.location.LatLng getMapCenter() {
|
||||
fr.free.nrw.commons.location.LatLng latLnge = new fr.free.nrw.commons.location.LatLng(
|
||||
mapCenter.getLatitude(), mapCenter.getLongitude(), 100);
|
||||
if (applicationKvStore.getString("LastLocation") != null) {
|
||||
final String[] locationLatLng
|
||||
= applicationKvStore.getString("LastLocation").split(",");
|
||||
lastKnownLocation
|
||||
= new fr.free.nrw.commons.location.LatLng(Double.parseDouble(locationLatLng[0]),
|
||||
Double.parseDouble(locationLatLng[1]), 1f);
|
||||
} else {
|
||||
lastKnownLocation = new fr.free.nrw.commons.location.LatLng(51.50550,
|
||||
-0.07520, 1f);
|
||||
}
|
||||
fr.free.nrw.commons.location.LatLng latLnge = lastKnownLocation;
|
||||
if (mapCenter != null) {
|
||||
latLnge = new fr.free.nrw.commons.location.LatLng(
|
||||
mapCenter.getLatitude(), mapCenter.getLongitude(), 100);
|
||||
}
|
||||
return latLnge;
|
||||
}
|
||||
|
||||
|
|
@ -1320,7 +1329,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
|||
@Override
|
||||
public void checkPermissionsAndPerformAction() {
|
||||
Timber.d("Checking permission and perfoming action");
|
||||
locationPermissionLauncher.launch(new String[]{permission.ACCESS_FINE_LOCATION});
|
||||
locationPermissionLauncher.launch(permission.ACCESS_FINE_LOCATION);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1625,7 +1634,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
|||
*/
|
||||
public void updateMarker(final boolean isBookmarked, final Place place,
|
||||
@Nullable final fr.free.nrw.commons.location.LatLng curLatLng) {
|
||||
addMarkerToMap(place, isBookmarked);
|
||||
addMarkerToMap(place, isBookmarked);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1770,7 +1779,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
|||
mapView.invalidate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue