Skip to content

Commit 4caa8a5

Browse files
5195: Fix crash on setting location for pictures with no EXIF location (#5205)
* LocationPickerActivity: fix crash on setting location for pictures with no EXIF location * strings.xml: remove extra string introduced * optimise constants * LocationPickerActivity: request for permission only on tapping target icon * remove newline * handle location permissions using LocationPermissionsHelper
1 parent 6881158 commit 4caa8a5

File tree

5 files changed

+53
-20
lines changed

5 files changed

+53
-20
lines changed

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

+39-3
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@
5757
import fr.free.nrw.commons.R;
5858
import fr.free.nrw.commons.Utils;
5959
import fr.free.nrw.commons.kvstore.JsonKvStore;
60+
import fr.free.nrw.commons.location.LocationPermissionsHelper;
61+
import fr.free.nrw.commons.location.LocationPermissionsHelper.Dialog;
62+
import fr.free.nrw.commons.location.LocationPermissionsHelper.LocationPermissionCallback;
63+
import fr.free.nrw.commons.location.LocationServiceManager;
6064
import fr.free.nrw.commons.theme.BaseActivity;
6165
import fr.free.nrw.commons.utils.SystemThemeUtils;
6266
import javax.inject.Inject;
@@ -148,6 +152,9 @@ public class LocationPickerActivity extends BaseActivity implements OnMapReadyCa
148152
SystemThemeUtils systemThemeUtils;
149153
private boolean isDarkTheme;
150154

155+
@Inject
156+
LocationServiceManager locationManager;
157+
151158
@Override
152159
protected void onCreate(@Nullable final Bundle savedInstanceState) {
153160
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
@@ -452,11 +459,40 @@ private void addCenterOnGPSButton(){
452459
fabCenterOnLocation = findViewById(R.id.center_on_gps);
453460
fabCenterOnLocation.setOnClickListener(view -> getCenter());
454461
}
462+
455463
/**
456-
* Animate map to move to desired Latitude and Longitude
464+
* Center the map at user's current location
457465
*/
458-
void getCenter() {
459-
mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(),location.getLongitude()),15.0));
466+
private void getCenter() {
467+
LocationPermissionsHelper.Dialog locationAccessDialog = new Dialog(
468+
R.string.location_permission_title,
469+
R.string.upload_map_location_access
470+
);
471+
472+
LocationPermissionsHelper.Dialog locationOffDialog = new Dialog(
473+
R.string.ask_to_turn_location_on,
474+
R.string.upload_map_location_access
475+
);
476+
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+
final CameraPosition position;
487+
position = new CameraPosition.Builder()
488+
.target(new com.mapbox.mapboxsdk.geometry.LatLng(currLocation.getLatitude(), currLocation.getLongitude(), 0)) // Sets the new camera position
489+
.zoom(mapboxMap.getCameraPosition().zoom) // Same zoom level
490+
.build();
491+
492+
mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(position), 1000);
493+
}
494+
});
495+
locationPermissionsHelper.handleLocationPermissions(locationAccessDialog, locationOffDialog);
460496
}
461497

462498
@Override

app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,12 @@ private void createDialogsAndHandleLocationPermissions(Activity activity) {
9090
activity, locationManager,
9191
new LocationPermissionCallback() {
9292
@Override
93-
public void onLocationPermissionDenied() {
93+
public void onLocationPermissionDenied(String toastMessage) {
94+
Toast.makeText(
95+
activity,
96+
toastMessage,
97+
Toast.LENGTH_LONG
98+
).show();
9499
initiateCameraUpload(activity);
95100
}
96101

app/src/main/java/fr/free/nrw/commons/location/LocationPermissionsHelper.java

+5-15
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,8 @@ private void requestForLocationAccess(
6868
},
6969
() -> {
7070
if (callback != null) {
71-
Toast.makeText(
72-
activity,
73-
R.string.in_app_camera_location_permission_denied,
74-
Toast.LENGTH_LONG
75-
).show();
76-
callback.onLocationPermissionDenied();
71+
callback.onLocationPermissionDenied(activity.getString(
72+
R.string.in_app_camera_location_permission_denied));
7773
}
7874
},
7975
locationAccessDialog.dialogTitleResource,
@@ -102,14 +98,8 @@ private void showLocationOffDialog(Dialog locationOffDialog) {
10298
activity.getString(R.string.title_app_shortcut_setting),
10399
activity.getString(R.string.cancel),
104100
() -> openLocationSettings(),
105-
() -> {
106-
Toast.makeText(
107-
activity,
108-
R.string.in_app_camera_location_unavailable,
109-
Toast.LENGTH_LONG
110-
).show();
111-
callback.onLocationPermissionDenied();
112-
});
101+
() -> callback.onLocationPermissionDenied(activity.getString(
102+
R.string.in_app_camera_location_unavailable)));
113103
}
114104

115105
/**
@@ -131,7 +121,7 @@ private void openLocationSettings() {
131121
* Handle onPermissionDenied within individual classes based on the requirements
132122
*/
133123
public interface LocationPermissionCallback {
134-
void onLocationPermissionDenied();
124+
void onLocationPermissionDenied(String toastMessage);
135125
void onLocationPermissionGranted();
136126
}
137127
}

app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ private void createDialogsAndHandleLocationPermissions(Activity activity) {
218218
LocationPermissionsHelper locationPermissionsHelper = new LocationPermissionsHelper(
219219
activity, locationManager, new LocationPermissionCallback() {
220220
@Override
221-
public void onLocationPermissionDenied() {
221+
public void onLocationPermissionDenied(String toastMessage) {
222222
// dismiss the dialog
223223
}
224224

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

+2
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@
280280
<string name="copy_wikicode">Copy the wikitext to the clipboard</string>
281281
<string name="wikicode_copied">The wikitext was copied to the clipboard</string>
282282
<string name="nearby_location_not_available">Nearby might not work properly, Location not available.</string>
283+
<string name="upload_location_access_denied">Location access denied. Please set your location manually to use this feature.</string>
283284
<string name="location_permission_rationale_nearby">Permission required to display a list of nearby places</string>
284285

285286
<string name="nearby_directions">Directions</string>
@@ -621,6 +622,7 @@ Upload your first media by tapping on the add button.</string>
621622
<string name="recommend_high_accuracy_mode">For best results, choose the High Accuracy mode.</string>
622623
<string name="ask_to_turn_location_on">Turn on location?</string>
623624
<string name="nearby_needs_location">Nearby needs location enabled to work properly</string>
625+
<string name="upload_map_location_access">You need to give access to your current location to set location automatically.</string>
624626
<string name="use_location_from_similar_image">Did you shoot these two pictures at the same place? Do you want to use the latitude/longitude of the picture on the right?</string>
625627
<string name="load_more">Load More</string>
626628
<string name="nearby_no_results">No places found, try changing your search criteria.</string>

0 commit comments

Comments
 (0)