am 1aab56ce: Merge "Implement granting of URI permissions from picker.  DO NOT MERGE." into gingerbread

Merge commit '1aab56ce88d0b85da319e2b54ab506cd03d102e0' into gingerbread-plus-aosp

* commit '1aab56ce88d0b85da319e2b54ab506cd03d102e0':
  Implement granting of URI permissions from picker.  DO NOT MERGE.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 09bdb1d..e543e61 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -222,23 +222,23 @@
             <intent-filter>
                 <action android:name="android.intent.action.PICK" />
                 <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.dir/contact" android:host="com.android.contacts" />
-                <data android:mimeType="vnd.android.cursor.dir/person" android:host="contacts" />
-                <data android:mimeType="vnd.android.cursor.dir/phone_v2" android:host="com.android.contacts" />
-                <data android:mimeType="vnd.android.cursor.dir/phone" android:host="contacts" />
-                <data android:mimeType="vnd.android.cursor.dir/postal-address_v2" android:host="com.android.contacts" />
-                <data android:mimeType="vnd.android.cursor.dir/postal-address" android:host="contacts" />
+                <data android:mimeType="vnd.android.cursor.dir/contact" />
+                <data android:mimeType="vnd.android.cursor.dir/person" />
+                <data android:mimeType="vnd.android.cursor.dir/phone_v2" />
+                <data android:mimeType="vnd.android.cursor.dir/phone" />
+                <data android:mimeType="vnd.android.cursor.dir/postal-address_v2" />
+                <data android:mimeType="vnd.android.cursor.dir/postal-address" />
             </intent-filter>
 
             <intent-filter>
                 <action android:name="android.intent.action.GET_CONTENT" />
                 <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/contact" android:host="com.android.contacts" />
-                <data android:mimeType="vnd.android.cursor.item/person" android:host="contacts" />
-                <data android:mimeType="vnd.android.cursor.item/phone_v2" android:host="com.android.contacts" />
-                <data android:mimeType="vnd.android.cursor.item/phone" android:host="contacts" />
-                <data android:mimeType="vnd.android.cursor.item/postal-address_v2" android:host="com.android.contacts" />
-                <data android:mimeType="vnd.android.cursor.item/postal-address" android:host="contacts" />
+                <data android:mimeType="vnd.android.cursor.item/contact" />
+                <data android:mimeType="vnd.android.cursor.item/person" />
+                <data android:mimeType="vnd.android.cursor.item/phone_v2" />
+                <data android:mimeType="vnd.android.cursor.item/phone" />
+                <data android:mimeType="vnd.android.cursor.item/postal-address_v2" />
+                <data android:mimeType="vnd.android.cursor.item/postal-address" />
             </intent-filter>
 
         </activity>
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 0d2c7eb..2e69994 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -1528,7 +1528,8 @@
             case SUBACTIVITY_NEW_CONTACT:
                 if (resultCode == RESULT_OK) {
                     returnPickerResult(null, data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME),
-                            data.getData());
+                            data.getData(), (mMode & MODE_MASK_PICKER) != 0
+                            ? Intent.FLAG_GRANT_READ_URI_PERMISSION : 0);
                 }
                 break;
 
@@ -1839,7 +1840,7 @@
                 final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                 startActivityForResult(intent, SUBACTIVITY_VIEW_CONTACT);
             } else if (mMode == MODE_JOIN_CONTACT) {
-                returnPickerResult(null, null, uri);
+                returnPickerResult(null, null, uri, 0);
             } else if (mMode == MODE_QUERY_PICK_TO_VIEW) {
                 // Started with query that should launch to view contact
                 final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
@@ -1847,14 +1848,16 @@
                 finish();
             } else if (mMode == MODE_PICK_PHONE || mMode == MODE_QUERY_PICK_PHONE) {
                 Cursor c = (Cursor) mAdapter.getItem(position);
-                returnPickerResult(c, c.getString(PHONE_DISPLAY_NAME_COLUMN_INDEX), uri);
+                returnPickerResult(c, c.getString(PHONE_DISPLAY_NAME_COLUMN_INDEX), uri,
+                        Intent.FLAG_GRANT_READ_URI_PERMISSION);
             } else if ((mMode & MODE_MASK_PICKER) != 0) {
                 Cursor c = (Cursor) mAdapter.getItem(position);
-                returnPickerResult(c, c.getString(getSummaryDisplayNameColumnIndex()), uri);
+                returnPickerResult(c, c.getString(getSummaryDisplayNameColumnIndex()), uri,
+                        Intent.FLAG_GRANT_READ_URI_PERMISSION);
             } else if (mMode == MODE_PICK_POSTAL
                     || mMode == MODE_LEGACY_PICK_POSTAL
                     || mMode == MODE_LEGACY_PICK_PHONE) {
-                returnPickerResult(null, null, uri);
+                returnPickerResult(null, null, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
             }
         } else {
             signalError();
@@ -1872,7 +1875,7 @@
      * @param selectedUri In most cases, this should be a lookup {@link Uri}, possibly
      *            generated through {@link Contacts#getLookupUri(long, String)}.
      */
-    private void returnPickerResult(Cursor c, String name, Uri selectedUri) {
+    private void returnPickerResult(Cursor c, String name, Uri selectedUri, int uriPerms) {
         final Intent intent = new Intent();
 
         if (mShortcutAction != null) {
@@ -1924,6 +1927,7 @@
             setResult(RESULT_OK, intent);
         } else {
             intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
+            intent.addFlags(uriPerms);
             setResult(RESULT_OK, intent.setData(selectedUri));
         }
         finish();