From 88d617210005ffdbbd72e1cf0a779fb686a7e8c8 Mon Sep 17 00:00:00 2001 From: jinwu Date: Thu, 9 Feb 2017 18:43:53 +0800 Subject: SnapdragonGallery: Fix crash of viewing download uri Check the permission and flag before viewing downloan uri to avoid app's crash. Change-Id: I32bfb4a9c8230500d2f2e4750232fc1ac2f1ad61 CRs-Fixed: 2003220 --- src/com/android/gallery3d/app/GalleryActivity.java | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src') diff --git a/src/com/android/gallery3d/app/GalleryActivity.java b/src/com/android/gallery3d/app/GalleryActivity.java index bdcc0c6b4..9f4b8eeb3 100755 --- a/src/com/android/gallery3d/app/GalleryActivity.java +++ b/src/com/android/gallery3d/app/GalleryActivity.java @@ -27,6 +27,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; +import android.content.UriMatcher; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; @@ -91,6 +92,17 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On public static final String KEY_FROM_SNAPCAM = "from-snapcam"; public static final String KEY_TOTAL_NUMBER = "total-number"; + private static final int ALL_DOWNLOADS = 1; + private static final int ALL_DOWNLOADS_ID = 2; + private static final UriMatcher sURIMatcher = + new UriMatcher(UriMatcher.NO_MATCH); + public static final String PERMISSION_ACCESS_ALL = + "android.permission.ACCESS_ALL_DOWNLOADS"; + static { + sURIMatcher.addURI("downloads", "all_downloads", ALL_DOWNLOADS); + sURIMatcher.addURI("downloads", "all_downloads/#", ALL_DOWNLOADS_ID); + } + private static final String TAG = "GalleryActivity"; private Dialog mVersionCheckDialog; private ListView mDrawerListView; @@ -366,6 +378,17 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On } else if (Intent.ACTION_VIEW.equalsIgnoreCase(action) || ACTION_REVIEW.equalsIgnoreCase(action)){ mDrawerLayoutSupported = false; + Uri uri = intent.getData(); + int flag = intent.getFlags(); + int match = sURIMatcher.match(uri); + if ((match == ALL_DOWNLOADS || match == ALL_DOWNLOADS_ID) && + (flag & Intent.FLAG_GRANT_READ_URI_PERMISSION) == 0) { + if (checkCallingOrSelfPermission( + PERMISSION_ACCESS_ALL) != PackageManager.PERMISSION_GRANTED) { + Log.w(TAG, "no permission to view: " + uri); + return; + } + } startViewAction(intent); } else { mDrawerLayoutSupported = true; -- cgit v1.2.3