OSDN Git Service

CMFileManager: Fix force close when sharing more than one file at a time
authorRaj Yengisetty <rajesh@cyngn.com>
Mon, 1 Dec 2014 19:06:34 +0000 (11:06 -0800)
committerGerrit Code Review <gerrit@cyanogenmod.org>
Tue, 9 Dec 2014 22:31:40 +0000 (22:31 +0000)
Change-Id: I64eb78ad4a2bbbe5626c0c93c4a80e0b8b97777b

src/com/cyanogenmod/filemanager/ui/policy/IntentsActionPolicy.java

index 0102062..47be24e 100644 (file)
@@ -509,10 +509,25 @@ public final class IntentsActionPolicy extends ActionsPolicy {
         String authority = null;
         if (uri != null) {
             authority = uri.getAuthority();
+            grantSecureAccess(intent, authority, ri, uri);
         } else if (intent.getExtras() != null) {
-            uri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
-            authority = uri.getAuthority();
+            Object obj = intent.getExtras().get(Intent.EXTRA_STREAM);
+            if (obj instanceof Uri) {
+                uri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
+                authority = uri.getAuthority();
+                grantSecureAccess(intent, authority, ri, uri);
+            } else if (obj instanceof ArrayList) {
+                ArrayList<Uri> uris = (ArrayList<Uri>) intent.getExtras().get(Intent.EXTRA_STREAM);
+                for (Uri u : uris) {
+                    authority = u.getAuthority();
+                    grantSecureAccess(intent, authority, ri, u);
+                }
+            }
         }
+    }
+
+    private static final void grantSecureAccess(Intent intent, String authority, ResolveInfo ri,
+            Uri uri) {
         if (authority != null && authority.equals(SecureResourceProvider.AUTHORITY)) {
             boolean isInternalEditor = isInternalEditor(ri);
             if (isInternalEditor) {