Skip to content

Commit 9525409

Browse files
authored
fixes issues related to location permission denial even when allowed inside in-app camera flow (#5313)
* fixes issues related to location permission denial even when allowed inside in-app camera flow * fixes related to in app camera location permissions
1 parent 8d604a2 commit 9525409

18 files changed

+428
-237
lines changed

app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java

+35-23
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import static fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.LAST_ZOOM;
1111

1212
import android.content.Intent;
13+
import android.content.pm.PackageManager;
1314
import android.graphics.BitmapFactory;
1415
import android.location.Location;
1516
import android.os.Bundle;
@@ -21,7 +22,6 @@
2122
import android.widget.Button;
2223
import android.widget.ImageView;
2324
import android.widget.TextView;
24-
import android.widget.Toast;
2525
import androidx.annotation.NonNull;
2626
import androidx.annotation.Nullable;
2727
import androidx.appcompat.app.ActionBar;
@@ -56,6 +56,7 @@
5656
import fr.free.nrw.commons.MapStyle;
5757
import fr.free.nrw.commons.R;
5858
import fr.free.nrw.commons.Utils;
59+
import fr.free.nrw.commons.filepicker.Constants;
5960
import fr.free.nrw.commons.kvstore.JsonKvStore;
6061
import fr.free.nrw.commons.location.LocationPermissionsHelper;
6162
import fr.free.nrw.commons.location.LocationPermissionsHelper.Dialog;
@@ -72,7 +73,7 @@
7273
* Helps to pick location and return the result with an intent
7374
*/
7475
public class LocationPickerActivity extends BaseActivity implements OnMapReadyCallback,
75-
OnCameraMoveStartedListener, OnCameraIdleListener, Observer<CameraPosition> {
76+
OnCameraMoveStartedListener, OnCameraIdleListener, Observer<CameraPosition>, LocationPermissionCallback {
7677

7778
/**
7879
* DROPPED_MARKER_LAYER_ID : id for layer
@@ -474,30 +475,21 @@ private void getCenter() {
474475
R.string.upload_map_location_access
475476
);
476477
LocationPermissionsHelper locationPermissionsHelper = new LocationPermissionsHelper(
477-
this, locationManager, new LocationPermissionCallback() {
478-
@Override
479-
public void onLocationPermissionDenied(String toastMessage) {
480-
// Do nothing
481-
}
482-
483-
@Override
484-
public void onLocationPermissionGranted() {
485-
fr.free.nrw.commons.location.LatLng currLocation = locationManager.getLastLocation();
486-
if (currLocation != null) {
487-
final CameraPosition position;
488-
position = new CameraPosition.Builder()
489-
.target(new com.mapbox.mapboxsdk.geometry.LatLng(currLocation.getLatitude(),
490-
currLocation.getLongitude(), 0)) // Sets the new camera position
491-
.zoom(mapboxMap.getCameraPosition().zoom) // Same zoom level
492-
.build();
493-
494-
mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(position), 1000);
495-
}
496-
}
497-
});
478+
this, locationManager, this);
498479
locationPermissionsHelper.handleLocationPermissions(locationAccessDialog, locationOffDialog);
499480
}
500481

482+
@Override
483+
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions,
484+
@NonNull final int[] grantResults) {
485+
if (requestCode == Constants.RequestCodes.LOCATION && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
486+
onLocationPermissionGranted();
487+
} else {
488+
onLocationPermissionDenied("");
489+
}
490+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
491+
}
492+
501493
@Override
502494
protected void onStart() {
503495
super.onStart();
@@ -539,4 +531,24 @@ public void onLowMemory() {
539531
super.onLowMemory();
540532
mapView.onLowMemory();
541533
}
534+
535+
@Override
536+
public void onLocationPermissionDenied(String toastMessage) {
537+
//do nothing
538+
}
539+
540+
@Override
541+
public void onLocationPermissionGranted() {
542+
fr.free.nrw.commons.location.LatLng currLocation = locationManager.getLastLocation();
543+
if (currLocation != null) {
544+
final CameraPosition position;
545+
position = new CameraPosition.Builder()
546+
.target(new com.mapbox.mapboxsdk.geometry.LatLng(currLocation.getLatitude(),
547+
currLocation.getLongitude(), 0)) // Sets the new camera position
548+
.zoom(mapboxMap.getCameraPosition().zoom) // Same zoom level
549+
.build();
550+
551+
mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(position), 1000);
552+
}
553+
}
542554
}

app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java

+26-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.free.nrw.commons.bookmarks.locations;
22

3+
import android.Manifest.permission;
34
import android.content.Intent;
45
import android.os.Bundle;
56
import android.view.LayoutInflater;
@@ -8,6 +9,9 @@
89
import android.widget.ProgressBar;
910
import android.widget.RelativeLayout;
1011
import android.widget.TextView;
12+
import androidx.activity.result.ActivityResultCallback;
13+
import androidx.activity.result.ActivityResultLauncher;
14+
import androidx.activity.result.contract.ActivityResultContracts;
1115
import androidx.annotation.NonNull;
1216
import androidx.annotation.Nullable;
1317
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -21,6 +25,7 @@
2125
import fr.free.nrw.commons.nearby.fragments.CommonPlaceClickActions;
2226
import fr.free.nrw.commons.nearby.fragments.PlaceAdapter;
2327
import java.util.List;
28+
import java.util.Map;
2429
import javax.inject.Inject;
2530
import kotlin.Unit;
2631

@@ -36,6 +41,25 @@ public class BookmarkLocationsFragment extends DaggerFragment {
3641
@Inject BookmarkLocationsDao bookmarkLocationDao;
3742
@Inject CommonPlaceClickActions commonPlaceClickActions;
3843
private PlaceAdapter adapter;
44+
private ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
45+
@Override
46+
public void onActivityResult(Map<String, Boolean> result) {
47+
boolean areAllGranted = true;
48+
for(final boolean b : result.values()) {
49+
areAllGranted = areAllGranted && b;
50+
}
51+
52+
if (areAllGranted) {
53+
contributionController.locationPermissionCallback.onLocationPermissionGranted();
54+
} else {
55+
if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
56+
contributionController.handleShowRationaleFlowCameraLocation(getActivity());
57+
} else {
58+
contributionController.locationPermissionCallback.onLocationPermissionDenied(getActivity().getString(R.string.in_app_camera_location_permission_denied));
59+
}
60+
}
61+
}
62+
});
3963

4064
/**
4165
* Create an instance of the fragment with the right bundle parameters
@@ -67,7 +91,8 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
6791
adapter.remove(place);
6892
return Unit.INSTANCE;
6993
},
70-
commonPlaceClickActions
94+
commonPlaceClickActions,
95+
inAppCameraLocationPermissionLauncher
7196
);
7297
recyclerView.setAdapter(adapter);
7398
}

0 commit comments

Comments
 (0)