/**@class android.provider.ContactsContract.StreamItemPhotos
 implements android.provider.BaseColumns

 implements android.provider.ContactsContract.StreamItemPhotosColumns

@extends java.lang.Object

 <p>
 Constants for the stream_item_photos table, which contains photos associated with
 social stream updates.
 </p>
 <p>
 Access to social stream photos requires additional permissions beyond the read/write
 contact permissions required by the provider.  Querying for social stream photos
 requires android.permission.READ_SOCIAL_STREAM permission, and inserting or updating
 social stream photos requires android.permission.WRITE_SOCIAL_STREAM permission.
 </p>
 <h3>Account check</h3>
 <p>
 The content URIs to the insert, update and delete operations are required to have the account
 information matching that of the owning raw contact as query parameters, namely
 {@link android.provider.ContactsContract.RawContacts#ACCOUNT_TYPE} and {@link android.provider.ContactsContract.RawContacts#ACCOUNT_NAME}.
 {@link android.provider.ContactsContract.RawContacts#DATA_SET} isn't required.
 </p>
 <h3>Operations</h3>
 <dl>
 <dt><b>Insert</b></dt>
 <dd>
 <p>Social stream photo entries are associated with a social stream item.  Photos
 can be inserted into a social stream item in a couple of ways:
 <dl>
 <dt>
 Via the {@link android.provider.ContactsContract.StreamItems.StreamItemPhotos#CONTENT_DIRECTORY} sub-path of a
 stream item:
 </dt>
 <dd>
 <pre>
 ContentValues values = new ContentValues();
 values.put(StreamItemPhotos.SORT_INDEX, 1);
 values.put(StreamItemPhotos.PHOTO, photoData);
 Uri.Builder builder = StreamItems.CONTENT_URI.buildUpon();
 ContentUris.appendId(builder, streamItemId);
 builder.appendEncodedPath(StreamItems.StreamItemPhotos.CONTENT_DIRECTORY);
 builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
 builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
 Uri photoUri = getContentResolver().insert(builder.build(), values);
 long photoId = ContentUris.parseId(photoUri);
 </pre>
 </dd>
 <dt>Via the {@link android.provider.ContactsContract.StreamItems#CONTENT_PHOTO_URI} URI:</dt>
 <dd>
 <pre>
 ContentValues values = new ContentValues();
 values.put(StreamItemPhotos.STREAM_ITEM_ID, streamItemId);
 values.put(StreamItemPhotos.SORT_INDEX, 1);
 values.put(StreamItemPhotos.PHOTO, photoData);
 Uri.Builder builder = StreamItems.CONTENT_PHOTO_URI.buildUpon();
 builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
 builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
 Uri photoUri = getContentResolver().insert(builder.build(), values);
 long photoId = ContentUris.parseId(photoUri);
 </pre>
 </dd>
 </dl>
 </p>
 </dd>
 <dt><b>Update</b></dt>
 <dd>
 <p>Updates can only be made against a specific {@link android.provider.ContactsContract.StreamItemPhotos} entry,
 identified by both the stream item ID it belongs to and the stream item photo ID.
 This can be specified in two ways.
 <dl>
 <dt>Via the {@link android.provider.ContactsContract.StreamItems.StreamItemPhotos#CONTENT_DIRECTORY} sub-path of a
 stream item:
 </dt>
 <dd>
 <pre>
 ContentValues values = new ContentValues();
 values.put(StreamItemPhotos.PHOTO, newPhotoData);
 Uri.Builder builder = StreamItems.CONTENT_URI.buildUpon();
 ContentUris.appendId(builder, streamItemId);
 builder.appendEncodedPath(StreamItems.StreamItemPhotos.CONTENT_DIRECTORY);
 ContentUris.appendId(builder, streamItemPhotoId);
 builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
 builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
 getContentResolver().update(builder.build(), values, null, null);
 </pre>
 </dd>
 <dt>Via the {@link android.provider.ContactsContract.StreamItems#CONTENT_PHOTO_URI} URI:</dt>
 <dd>
 <pre>
 ContentValues values = new ContentValues();
 values.put(StreamItemPhotos.STREAM_ITEM_ID, streamItemId);
 values.put(StreamItemPhotos.PHOTO, newPhotoData);
 Uri.Builder builder = StreamItems.CONTENT_PHOTO_URI.buildUpon();
 builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
 builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
 getContentResolver().update(builder.build(), values);
 </pre>
 </dd>
 </dl>
 </p>
 </dd>
 <dt><b>Delete</b></dt>
 <dd>Deletes can be made against either a specific photo item in a stream item, or
 against all or a selected subset of photo items under a stream item.
 For example:
 <dl>
 <dt>Deleting a single photo via the
 {@link android.provider.ContactsContract.StreamItems.StreamItemPhotos#CONTENT_DIRECTORY} sub-path of a stream item:
 </dt>
 <dd>
 <pre>
 Uri.Builder builder = StreamItems.CONTENT_URI.buildUpon();
 ContentUris.appendId(builder, streamItemId);
 builder.appendEncodedPath(StreamItems.StreamItemPhotos.CONTENT_DIRECTORY);
 ContentUris.appendId(builder, streamItemPhotoId);
 builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
 builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
 getContentResolver().delete(builder.build(), null, null);
 </pre>
 </dd>
 <dt>Deleting all photos under a stream item</dt>
 <dd>
 <pre>
 Uri.Builder builder = StreamItems.CONTENT_URI.buildUpon();
 ContentUris.appendId(builder, streamItemId);
 builder.appendEncodedPath(StreamItems.StreamItemPhotos.CONTENT_DIRECTORY);
 builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
 builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
 getContentResolver().delete(builder.build(), null, null);
 </pre>
 </dd>
 </dl>
 </dd>
 <dt><b>Query</b></dt>
 <dl>
 <dt>Querying for a specific photo in a stream item</dt>
 <dd>
 <pre>
 Cursor c = getContentResolver().query(
     ContentUris.withAppendedId(
         Uri.withAppendedPath(
             ContentUris.withAppendedId(StreamItems.CONTENT_URI, streamItemId)
             StreamItems.StreamItemPhotos#CONTENT_DIRECTORY),
         streamItemPhotoId), null, null, null, null);
 </pre>
 </dd>
 <dt>Querying for all photos in a stream item</dt>
 <dd>
 <pre>
 Cursor c = getContentResolver().query(
     Uri.withAppendedPath(
         ContentUris.withAppendedId(StreamItems.CONTENT_URI, streamItemId)
         StreamItems.StreamItemPhotos#CONTENT_DIRECTORY),
     null, null, null, StreamItemPhotos.SORT_INDEX);
 </pre>
 </dl>
 The record will contain both a {@link android.provider.ContactsContract.StreamItemPhotos#PHOTO_FILE_ID} and a
 {@link android.provider.ContactsContract.StreamItemPhotos#PHOTO_URI}.  The {@link android.provider.ContactsContract.StreamItemPhotos#PHOTO_FILE_ID}
 can be used in conjunction with the {@link android.provider.ContactsContract.DisplayPhoto} API to
 retrieve photo content, or you can open the {@link android.provider.ContactsContract.StreamItemPhotos#PHOTO_URI} as
 an asset file, as follows:
 <pre>
 public InputStream openDisplayPhoto(String photoUri) {
     try {
         AssetFileDescriptor fd = getContentResolver().openAssetFileDescriptor(photoUri, "r");
         return fd.createInputStream();
     } catch (IOException e) {
         return null;
     }
 }
 <pre>
 </dd>
 </dl>

 @deprecated - Do not use. This will not be supported in the future. In the future,
 cursors returned from related queries will be empty.

 @removed
*/
var StreamItemPhotos = {

/** <p>
 The binary representation of the photo.  Any size photo can be inserted;
 the provider will resize it appropriately for storage and display.
 </p>
 <p>
 This is only intended for use when inserting or updating a stream item photo.
 To retrieve the photo that was stored, open {@link android.provider.ContactsContract.StreamItemPhotos#PHOTO_URI}
 as an asset file.
 </p>
 <P>Type: BLOB</P>

 @deprecated - Do not use. This will not be supported in the future. In the future,
 cursors returned from related queries will be empty.
*/
PHOTO : "photo",

};