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

Reply via email to