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();