Mholloway has uploaded a new change for review.
https://gerrit.wikimedia.org/r/298506
Change subject: Bugfix: Fix nearby crash on permissions request result
......................................................................
Bugfix: Fix nearby crash on permissions request result
Moving the permission result listener to MainActivity in
I320c8ea6414d4edd7efcf3924505a89b93abae86 resulted in result signals
being sent to MainActivity that it wasn't equipped to handle -- in this
case, where the result was for a location permission via nearby -- even
when the permission request came from the fragment.
Lesson learned: handle permission request results at the fragment level,
not the activity level!
Bug: 140084
Change-Id: I39037f03755b787149360763b1332d354704d26b
---
M app/src/main/java/org/wikipedia/Constants.java
M app/src/main/java/org/wikipedia/MainActivity.java
M app/src/main/java/org/wikipedia/feed/FeedFragment.java
M app/src/main/java/org/wikipedia/nearby/NearbyFragment.java
4 files changed, 49 insertions(+), 38 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/06/298506/1
diff --git a/app/src/main/java/org/wikipedia/Constants.java
b/app/src/main/java/org/wikipedia/Constants.java
index c24e121..d9d66be 100644
--- a/app/src/main/java/org/wikipedia/Constants.java
+++ b/app/src/main/java/org/wikipedia/Constants.java
@@ -10,6 +10,7 @@
public static final String WIKIPEDIA_URL = "https://wikipedia.org/";
public static final int WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST = 44;
+ public static final int GO_TO_LOCATION_PERMISSION_REQUEST = 50;
public static final int MAX_SUGGESTION_RESULTS = 3;
public static final int SUGGESTION_REQUEST_ITEMS = 5;
diff --git a/app/src/main/java/org/wikipedia/MainActivity.java
b/app/src/main/java/org/wikipedia/MainActivity.java
index 647a215..4bd7b3e 100644
--- a/app/src/main/java/org/wikipedia/MainActivity.java
+++ b/app/src/main/java/org/wikipedia/MainActivity.java
@@ -91,7 +91,6 @@
import org.wikipedia.util.ApiUtil;
import org.wikipedia.util.DateUtil;
import org.wikipedia.util.FeedbackUtil;
-import org.wikipedia.util.PermissionUtil;
import org.wikipedia.util.ShareUtil;
import org.wikipedia.util.log.L;
import org.wikipedia.views.WikiDrawerLayout;
@@ -225,6 +224,15 @@
private boolean wasNavItemSelected() {
return navItemSelected;
+ }
+
+ public void setPendingDownload(@Nullable FeaturedImage image) {
+ pendingDownloadImage = image;
+ }
+
+ @Nullable
+ public FeaturedImage pendingDownloadImage() {
+ return pendingDownloadImage;
}
@Override
@@ -909,10 +917,10 @@
}
@Override
- public void onFeedDownloadImage(@NonNull FeaturedImage image) {
+ public void onFeedDownloadImage(@NonNull FeedFragment fragment, @NonNull
FeaturedImage image) {
if (!(hasWriteExternalStoragePermission(this))) {
setPendingDownload(image);
- requestWriteExternalStoragePermission();
+ requestWriteExternalStoragePermission(fragment);
} else {
download(image);
}
@@ -922,8 +930,8 @@
new MediaDownloadReceiver(MainActivity.this).download(image);
}
- private void requestWriteExternalStoragePermission() {
- requestWriteStorageRuntimePermissions(this,
+ private void requestWriteExternalStoragePermission(@NonNull FeedFragment
fragment) {
+ requestWriteStorageRuntimePermissions(fragment,
Constants.WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST);
}
@@ -1220,33 +1228,5 @@
new ComponentName(this, WidgetProviderFeaturedPage.class));
widgetIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(widgetIntent);
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode,
- @NonNull String[] permissions,
- @NonNull int[] grantResults) {
- switch (requestCode) {
- case Constants.WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST:
- if (PermissionUtil.isPermitted(grantResults)) {
- if (pendingDownloadImage != null) {
- new
MediaDownloadReceiver(this).download(pendingDownloadImage);
- setPendingDownload(null);
- }
- } else {
- setPendingDownload(null);
- L.i("Write permission was denied by user");
- FeedbackUtil.showMessage(this,
-
R.string.gallery_save_image_write_permission_rationale);
- }
- break;
- default:
- setPendingDownload(null);
- throw new RuntimeException("unexpected permission request code
" + requestCode);
- }
- }
-
- private void setPendingDownload(@Nullable FeaturedImage image) {
- pendingDownloadImage = image;
}
}
diff --git a/app/src/main/java/org/wikipedia/feed/FeedFragment.java
b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
index 245d159..45f4c67 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedFragment.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
@@ -17,6 +17,8 @@
import android.view.ViewGroup;
import org.wikipedia.BackPressedHandler;
+import org.wikipedia.Constants;
+import org.wikipedia.MainActivity;
import org.wikipedia.MainActivityToolbarProvider;
import org.wikipedia.R;
import org.wikipedia.WikipediaApp;
@@ -30,9 +32,12 @@
import org.wikipedia.feed.news.NewsItemCard;
import org.wikipedia.feed.view.FeedView;
import org.wikipedia.history.HistoryEntry;
+import org.wikipedia.page.gallery.MediaDownloadReceiver;
import org.wikipedia.settings.Prefs;
import org.wikipedia.util.DimenUtil;
import org.wikipedia.util.FeedbackUtil;
+import org.wikipedia.util.PermissionUtil;
+import org.wikipedia.util.log.L;
import java.util.List;
@@ -64,7 +69,7 @@
void onFeedSharePage(HistoryEntry entry);
void onFeedNewsItemSelected(NewsItemCard card);
void onFeedShareImage(FeaturedImageCard card);
- void onFeedDownloadImage(FeaturedImage image);
+ void onFeedDownloadImage(FeedFragment fragment, FeaturedImage image);
}
public static FeedFragment newInstance() {
@@ -235,7 +240,7 @@
@Override
public void onDownloadImage(@NonNull FeaturedImage image) {
if (getCallback() != null) {
- getCallback().onFeedDownloadImage(image);
+ getCallback().onFeedDownloadImage(FeedFragment.this, image);
}
}
}
@@ -264,4 +269,29 @@
});
snackbar.show();
}
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ @NonNull String[] permissions,
+ @NonNull int[] grantResults) {
+ switch (requestCode) {
+ case Constants.WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST:
+ if (PermissionUtil.isPermitted(grantResults)) {
+ if (((MainActivity) getActivity()).pendingDownloadImage()
!= null) {
+ new MediaDownloadReceiver(getActivity())
+ .download(((MainActivity)
getActivity()).pendingDownloadImage());
+ ((MainActivity)
getActivity()).setPendingDownload(null);
+ }
+ } else {
+ ((MainActivity) getActivity()).setPendingDownload(null);
+ L.i("Write permission was denied by user");
+ FeedbackUtil.showMessage(getActivity(),
+
R.string.gallery_save_image_write_permission_rationale);
+ }
+ break;
+ default:
+ ((MainActivity) getActivity()).setPendingDownload(null);
+ throw new RuntimeException("unexpected permission request code
" + requestCode);
+ }
+ }
}
diff --git a/app/src/main/java/org/wikipedia/nearby/NearbyFragment.java
b/app/src/main/java/org/wikipedia/nearby/NearbyFragment.java
index 379ef7d..7ca77b3 100644
--- a/app/src/main/java/org/wikipedia/nearby/NearbyFragment.java
+++ b/app/src/main/java/org/wikipedia/nearby/NearbyFragment.java
@@ -31,6 +31,7 @@
import com.mapbox.mapboxsdk.maps.Projection;
import com.mapbox.mapboxsdk.telemetry.MapboxEventManager;
+import org.wikipedia.Constants;
import org.wikipedia.R;
import org.wikipedia.Site;
import org.wikipedia.WikipediaApp;
@@ -52,7 +53,6 @@
public class NearbyFragment extends Fragment {
private static final String NEARBY_LAST_RESULT = "lastRes";
private static final String NEARBY_CURRENT_LOCATION = "currentLoc";
- private static final int GO_TO_LOCATION_PERMISSION_REQUEST = 50;
private final List<Marker> mMarkerList = new ArrayList<>();
@@ -210,7 +210,7 @@
private void checkLocationPermissionsToGoToUserLocation() {
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
-
requestLocationRuntimePermissions(GO_TO_LOCATION_PERMISSION_REQUEST);
+
requestLocationRuntimePermissions(Constants.GO_TO_LOCATION_PERMISSION_REQUEST);
} else if (mapboxMap != null) {
mapboxMap.setMyLocationEnabled(true);
goToUserLocation();
@@ -227,7 +227,7 @@
@NonNull String[] permissions,
@NonNull int[] grantResults) {
switch (requestCode) {
- case GO_TO_LOCATION_PERMISSION_REQUEST:
+ case Constants.GO_TO_LOCATION_PERMISSION_REQUEST:
if (PermissionUtil.isPermitted(grantResults) && mapboxMap !=
null) {
mapboxMap.setMyLocationEnabled(true);
goToUserLocation();
--
To view, visit https://gerrit.wikimedia.org/r/298506
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I39037f03755b787149360763b1332d354704d26b
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits