Skip to content

Commit 7d53513

Browse files
author
Dave Santoro
committed
DO NOT MERGE New permissions for social stream.
These permissions are needed to separate the (potentially invasive) access to the user's social stream from the existing read/write contacts permission. Per discussion with Android release team, we are also hiding the stream item API until we figure out a better way to guard the data. Bug 5406886 Change-Id: I8339d743c3ebe8923c7ee47f2900444efcf82a52
1 parent 121e805 commit 7d53513

File tree

5 files changed

+66
-116
lines changed

5 files changed

+66
-116
lines changed

api/14.txt

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -16583,10 +16583,6 @@ package android.provider {
1658316583
field public static final java.lang.String PHOTO_FILE_ID = "data14";
1658416584
}
1658516585

16586-
public static final class ContactsContract.Contacts.StreamItems implements android.provider.ContactsContract.StreamItemsColumns {
16587-
field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
16588-
}
16589-
1659016586
protected static abstract interface ContactsContract.ContactsColumns {
1659116587
field public static final java.lang.String DISPLAY_NAME = "display_name";
1659216588
field public static final java.lang.String HAS_PHONE_NUMBER = "has_phone_number";
@@ -16844,10 +16840,6 @@ package android.provider {
1684416840
field public static final java.lang.String DATA_ID = "data_id";
1684516841
}
1684616842

16847-
public static final class ContactsContract.RawContacts.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
16848-
field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
16849-
}
16850-
1685116843
protected static abstract interface ContactsContract.RawContactsColumns {
1685216844
field public static final java.lang.String AGGREGATION_MODE = "aggregation_mode";
1685316845
field public static final java.lang.String CONTACT_ID = "contact_id";
@@ -16911,56 +16903,6 @@ package android.provider {
1691116903
field public static final android.net.Uri PROFILE_CONTENT_URI;
1691216904
}
1691316905

16914-
public static final class ContactsContract.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
16915-
field public static final java.lang.String PHOTO = "photo";
16916-
}
16917-
16918-
protected static abstract interface ContactsContract.StreamItemPhotosColumns {
16919-
field public static final java.lang.String PHOTO_FILE_ID = "photo_file_id";
16920-
field public static final java.lang.String PHOTO_URI = "photo_uri";
16921-
field public static final java.lang.String SORT_INDEX = "sort_index";
16922-
field public static final java.lang.String STREAM_ITEM_ID = "stream_item_id";
16923-
field public static final java.lang.String SYNC1 = "stream_item_photo_sync1";
16924-
field public static final java.lang.String SYNC2 = "stream_item_photo_sync2";
16925-
field public static final java.lang.String SYNC3 = "stream_item_photo_sync3";
16926-
field public static final java.lang.String SYNC4 = "stream_item_photo_sync4";
16927-
}
16928-
16929-
public static final class ContactsContract.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
16930-
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item";
16931-
field public static final android.net.Uri CONTENT_LIMIT_URI;
16932-
field public static final android.net.Uri CONTENT_PHOTO_URI;
16933-
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item";
16934-
field public static final android.net.Uri CONTENT_URI;
16935-
field public static final java.lang.String MAX_ITEMS = "max_items";
16936-
}
16937-
16938-
public static final class ContactsContract.StreamItems.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
16939-
field public static final java.lang.String CONTENT_DIRECTORY = "photo";
16940-
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item_photo";
16941-
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo";
16942-
}
16943-
16944-
protected static abstract interface ContactsContract.StreamItemsColumns {
16945-
field public static final java.lang.String ACCOUNT_NAME = "account_name";
16946-
field public static final java.lang.String ACCOUNT_TYPE = "account_type";
16947-
field public static final java.lang.String COMMENTS = "comments";
16948-
field public static final java.lang.String CONTACT_ID = "contact_id";
16949-
field public static final java.lang.String CONTACT_LOOKUP_KEY = "contact_lookup";
16950-
field public static final java.lang.String DATA_SET = "data_set";
16951-
field public static final java.lang.String RAW_CONTACT_ID = "raw_contact_id";
16952-
field public static final java.lang.String RAW_CONTACT_SOURCE_ID = "raw_contact_source_id";
16953-
field public static final java.lang.String RES_ICON = "icon";
16954-
field public static final java.lang.String RES_LABEL = "label";
16955-
field public static final java.lang.String RES_PACKAGE = "res_package";
16956-
field public static final java.lang.String SYNC1 = "stream_item_sync1";
16957-
field public static final java.lang.String SYNC2 = "stream_item_sync2";
16958-
field public static final java.lang.String SYNC3 = "stream_item_sync3";
16959-
field public static final java.lang.String SYNC4 = "stream_item_sync4";
16960-
field public static final java.lang.String TEXT = "text";
16961-
field public static final java.lang.String TIMESTAMP = "timestamp";
16962-
}
16963-
1696416906
protected static abstract interface ContactsContract.SyncColumns implements android.provider.ContactsContract.BaseSyncColumns {
1696516907
field public static final java.lang.String ACCOUNT_NAME = "account_name";
1696616908
field public static final java.lang.String ACCOUNT_TYPE = "account_type";

api/current.txt

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -16583,10 +16583,6 @@ package android.provider {
1658316583
field public static final java.lang.String PHOTO_FILE_ID = "data14";
1658416584
}
1658516585

16586-
public static final class ContactsContract.Contacts.StreamItems implements android.provider.ContactsContract.StreamItemsColumns {
16587-
field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
16588-
}
16589-
1659016586
protected static abstract interface ContactsContract.ContactsColumns {
1659116587
field public static final java.lang.String DISPLAY_NAME = "display_name";
1659216588
field public static final java.lang.String HAS_PHONE_NUMBER = "has_phone_number";
@@ -16844,10 +16840,6 @@ package android.provider {
1684416840
field public static final java.lang.String DATA_ID = "data_id";
1684516841
}
1684616842

16847-
public static final class ContactsContract.RawContacts.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
16848-
field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
16849-
}
16850-
1685116843
protected static abstract interface ContactsContract.RawContactsColumns {
1685216844
field public static final java.lang.String AGGREGATION_MODE = "aggregation_mode";
1685316845
field public static final java.lang.String CONTACT_ID = "contact_id";
@@ -16911,56 +16903,6 @@ package android.provider {
1691116903
field public static final android.net.Uri PROFILE_CONTENT_URI;
1691216904
}
1691316905

16914-
public static final class ContactsContract.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
16915-
field public static final java.lang.String PHOTO = "photo";
16916-
}
16917-
16918-
protected static abstract interface ContactsContract.StreamItemPhotosColumns {
16919-
field public static final java.lang.String PHOTO_FILE_ID = "photo_file_id";
16920-
field public static final java.lang.String PHOTO_URI = "photo_uri";
16921-
field public static final java.lang.String SORT_INDEX = "sort_index";
16922-
field public static final java.lang.String STREAM_ITEM_ID = "stream_item_id";
16923-
field public static final java.lang.String SYNC1 = "stream_item_photo_sync1";
16924-
field public static final java.lang.String SYNC2 = "stream_item_photo_sync2";
16925-
field public static final java.lang.String SYNC3 = "stream_item_photo_sync3";
16926-
field public static final java.lang.String SYNC4 = "stream_item_photo_sync4";
16927-
}
16928-
16929-
public static final class ContactsContract.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
16930-
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item";
16931-
field public static final android.net.Uri CONTENT_LIMIT_URI;
16932-
field public static final android.net.Uri CONTENT_PHOTO_URI;
16933-
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item";
16934-
field public static final android.net.Uri CONTENT_URI;
16935-
field public static final java.lang.String MAX_ITEMS = "max_items";
16936-
}
16937-
16938-
public static final class ContactsContract.StreamItems.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
16939-
field public static final java.lang.String CONTENT_DIRECTORY = "photo";
16940-
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item_photo";
16941-
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo";
16942-
}
16943-
16944-
protected static abstract interface ContactsContract.StreamItemsColumns {
16945-
field public static final java.lang.String ACCOUNT_NAME = "account_name";
16946-
field public static final java.lang.String ACCOUNT_TYPE = "account_type";
16947-
field public static final java.lang.String COMMENTS = "comments";
16948-
field public static final java.lang.String CONTACT_ID = "contact_id";
16949-
field public static final java.lang.String CONTACT_LOOKUP_KEY = "contact_lookup";
16950-
field public static final java.lang.String DATA_SET = "data_set";
16951-
field public static final java.lang.String RAW_CONTACT_ID = "raw_contact_id";
16952-
field public static final java.lang.String RAW_CONTACT_SOURCE_ID = "raw_contact_source_id";
16953-
field public static final java.lang.String RES_ICON = "icon";
16954-
field public static final java.lang.String RES_LABEL = "label";
16955-
field public static final java.lang.String RES_PACKAGE = "res_package";
16956-
field public static final java.lang.String SYNC1 = "stream_item_sync1";
16957-
field public static final java.lang.String SYNC2 = "stream_item_sync2";
16958-
field public static final java.lang.String SYNC3 = "stream_item_sync3";
16959-
field public static final java.lang.String SYNC4 = "stream_item_sync4";
16960-
field public static final java.lang.String TEXT = "text";
16961-
field public static final java.lang.String TIMESTAMP = "timestamp";
16962-
}
16963-
1696416906
protected static abstract interface ContactsContract.SyncColumns implements android.provider.ContactsContract.BaseSyncColumns {
1696516907
field public static final java.lang.String ACCOUNT_NAME = "account_name";
1696616908
field public static final java.lang.String ACCOUNT_TYPE = "account_type";

core/java/android/provider/ContactsContract.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1611,9 +1611,16 @@ private Entity() {
16111611
}
16121612

16131613
/**
1614+
* <p>
16141615
* A sub-directory of a single contact that contains all of the constituent raw contact
16151616
* {@link ContactsContract.StreamItems} rows. This directory can be used either
16161617
* with a {@link #CONTENT_URI} or {@link #CONTENT_LOOKUP_URI}.
1618+
* </p>
1619+
* <p>
1620+
* Querying for social stream data requires android.permission.READ_SOCIAL_STREAM
1621+
* permission.
1622+
* </p>
1623+
* @hide
16171624
*/
16181625
public static final class StreamItems implements StreamItemsColumns {
16191626
/**
@@ -2669,6 +2676,14 @@ private Entity() {
26692676
* {@link ContactsContract.StreamItems} for a stand-alone table containing the
26702677
* same data.
26712678
* </p>
2679+
* <p>
2680+
* Access to the social stream through this sub-directory requires additional permissions
2681+
* beyond the read/write contact permissions required by the provider. Querying for
2682+
* social stream data requires android.permission.READ_SOCIAL_STREAM permission, and
2683+
* inserting or updating social stream items requires android.permission.WRITE_SOCIAL_STREAM
2684+
* permission.
2685+
* </p>
2686+
* @hide
26722687
*/
26732688
public static final class StreamItems implements BaseColumns, StreamItemsColumns {
26742689
/**
@@ -2963,6 +2978,12 @@ protected interface StatusColumns {
29632978
* transaction correspondingly. Insertion of more items beyond the limit will
29642979
* automatically lead to deletion of the oldest items, by {@link StreamItems#TIMESTAMP}.
29652980
* </p>
2981+
* <p>
2982+
* Access to the social stream through these URIs requires additional permissions beyond the
2983+
* read/write contact permissions required by the provider. Querying for social stream data
2984+
* requires android.permission.READ_SOCIAL_STREAM permission, and inserting or updating social
2985+
* stream items requires android.permission.WRITE_SOCIAL_STREAM permission.
2986+
* </p>
29662987
* <h3>Operations</h3>
29672988
* <dl>
29682989
* <dt><b>Insert</b></dt>
@@ -3073,6 +3094,7 @@ protected interface StatusColumns {
30733094
* </pre>
30743095
* </dd>
30753096
* </dl>
3097+
* @hide
30763098
*/
30773099
public static final class StreamItems implements BaseColumns, StreamItemsColumns {
30783100
/**
@@ -3133,6 +3155,12 @@ private StreamItems() {
31333155
* directory append {@link StreamItems.StreamItemPhotos#CONTENT_DIRECTORY} to
31343156
* an individual stream item URI.
31353157
* </p>
3158+
* <p>
3159+
* Access to social stream photos requires additional permissions beyond the read/write
3160+
* contact permissions required by the provider. Querying for social stream photos
3161+
* requires android.permission.READ_SOCIAL_STREAM permission, and inserting or updating
3162+
* social stream photos requires android.permission.WRITE_SOCIAL_STREAM permission.
3163+
* </p>
31363164
*/
31373165
public static final class StreamItemPhotos
31383166
implements BaseColumns, StreamItemPhotosColumns {
@@ -3164,6 +3192,7 @@ private StreamItemPhotos() {
31643192
* Columns in the StreamItems table.
31653193
*
31663194
* @see ContactsContract.StreamItems
3195+
* @hide
31673196
*/
31683197
protected interface StreamItemsColumns {
31693198
/**
@@ -3310,6 +3339,12 @@ protected interface StreamItemsColumns {
33103339
* Constants for the stream_item_photos table, which contains photos associated with
33113340
* social stream updates.
33123341
* </p>
3342+
* <p>
3343+
* Access to social stream photos requires additional permissions beyond the read/write
3344+
* contact permissions required by the provider. Querying for social stream photos
3345+
* requires android.permission.READ_SOCIAL_STREAM permission, and inserting or updating
3346+
* social stream photos requires android.permission.WRITE_SOCIAL_STREAM permission.
3347+
* </p>
33133348
* <h3>Operations</h3>
33143349
* <dl>
33153350
* <dt><b>Insert</b></dt>
@@ -3448,6 +3483,7 @@ protected interface StreamItemsColumns {
34483483
* <pre>
34493484
* </dd>
34503485
* </dl>
3486+
* @hide
34513487
*/
34523488
public static final class StreamItemPhotos implements BaseColumns, StreamItemPhotosColumns {
34533489
/**
@@ -3475,6 +3511,7 @@ private StreamItemPhotos() {
34753511
* Columns in the StreamItemPhotos table.
34763512
*
34773513
* @see ContactsContract.StreamItemPhotos
3514+
* @hide
34783515
*/
34793516
protected interface StreamItemPhotosColumns {
34803517
/**

core/res/AndroidManifest.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,23 @@
263263
android:label="@string/permlab_writeProfile"
264264
android:description="@string/permdesc_writeProfile" />
265265

266+
<!-- Allows an application to read from the user's social stream.
267+
@hide -->
268+
<permission android:name="android.permission.READ_SOCIAL_STREAM"
269+
android:permissionGroup="android.permission-group.PERSONAL_INFO"
270+
android:protectionLevel="dangerous"
271+
android:label="@string/permlab_readSocialStream"
272+
android:description="@string/permdesc_readSocialStream" />
273+
274+
<!-- Allows an application to write (but not read) the user's
275+
social stream data.
276+
@hide -->
277+
<permission android:name="android.permission.WRITE_SOCIAL_STREAM"
278+
android:permissionGroup="android.permission-group.PERSONAL_INFO"
279+
android:protectionLevel="dangerous"
280+
android:label="@string/permlab_writeSocialStream"
281+
android:description="@string/permdesc_writeSocialStream" />
282+
266283
<!-- Allows an application to read the user's calendar data. -->
267284
<permission android:name="android.permission.READ_CALENDAR"
268285
android:permissionGroup="android.permission-group.PERSONAL_INFO"

core/res/res/values/strings.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -937,6 +937,18 @@
937937
information. This means other applications can identify you and send your profile
938938
information to others.</string>
939939

940+
<!-- Title of the read social stream permission, listed so the user can decide whether to allow the application to read information from the user's social stream. [CHAR LIMIT=30] -->
941+
<string name="permlab_readSocialStream" product="default">read your social stream</string>
942+
<string name="permdesc_readSocialStream" product="default">Allows the application to access
943+
and sync social updates from you and your friends. Malicious apps can use this to read
944+
private communications between you and your friends on social networks.</string>
945+
946+
<!-- Title of the write social stream permission, listed so the user can decide whether to allow the application to write information to the user's social stream. [CHAR LIMIT=30] -->
947+
<string name="permlab_writeSocialStream" product="default">write to your social stream</string>
948+
<string name="permdesc_writeSocialStream" product="default">Allows the application to display
949+
social updates from your friends. Malicious apps can use this to pretend to be a friend
950+
and trick you into revealing passwords or other confidential information.</string>
951+
940952
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
941953
<string name="permlab_readCalendar">read calendar events plus confidential information</string>
942954
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->

0 commit comments

Comments
 (0)