19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.provider; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.SdkConstant; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.SdkConstant.SdkConstantType; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentUris; 243822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissenimport android.content.Context; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.DatabaseUtils; 2700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chenimport android.database.sqlite.SQLiteException; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.BitmapFactory; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Matrix; 3100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chenimport android.media.MiniThumbFile; 32bf124e7e41f7850ac1b7be808221a462db6f3447Ray Chenimport android.media.ThumbnailUtils; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Environment; 3500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chenimport android.os.ParcelFileDescriptor; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileInputStream; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileNotFoundException; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.OutputStream; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Media provider contains meta data for all available media on both internal 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and external storage devices. 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chenpublic final class MediaStore { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static String TAG = "MediaStore"; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String AUTHORITY = "media"; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String CONTENT_AUTHORITY_SLASH = "content://" + AUTHORITY + "/"; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 55a31560598af25d5116effc2a6af0d9be12a0628dMike Lockwood /** 56a31560598af25d5116effc2a6af0d9be12a0628dMike Lockwood * Broadcast Action: A broadcast to indicate the end of an MTP session with the host. 57a31560598af25d5116effc2a6af0d9be12a0628dMike Lockwood * This broadcast is only sent if MTP activity has modified the media database during the 58a31560598af25d5116effc2a6af0d9be12a0628dMike Lockwood * most recent MTP session. 59e222872a77324dd7a1a8b9a11900a0c70bc4d6e8Mike Lockwood * 60e222872a77324dd7a1a8b9a11900a0c70bc4d6e8Mike Lockwood * @hide 61a31560598af25d5116effc2a6af0d9be12a0628dMike Lockwood */ 62a31560598af25d5116effc2a6af0d9be12a0628dMike Lockwood public static final String ACTION_MTP_SESSION_END = "android.provider.action.MTP_SESSION_END"; 63a31560598af25d5116effc2a6af0d9be12a0628dMike Lockwood 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 65edcdbb6d3bb6f66e9fd91b15ef45f4cec5694393Daniel Sandler * Activity Action: Launch a music player. 66edcdbb6d3bb6f66e9fd91b15ef45f4cec5694393Daniel Sandler * The activity should be able to play, browse, or manipulate music files stored on the device. 676651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * 686651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * @deprecated Use {@link android.content.Intent#CATEGORY_APP_MUSIC} instead. 69edcdbb6d3bb6f66e9fd91b15ef45f4cec5694393Daniel Sandler */ 706651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown @Deprecated 71edcdbb6d3bb6f66e9fd91b15ef45f4cec5694393Daniel Sandler @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 72edcdbb6d3bb6f66e9fd91b15ef45f4cec5694393Daniel Sandler public static final String INTENT_ACTION_MUSIC_PLAYER = "android.intent.action.MUSIC_PLAYER"; 73edcdbb6d3bb6f66e9fd91b15ef45f4cec5694393Daniel Sandler 74edcdbb6d3bb6f66e9fd91b15ef45f4cec5694393Daniel Sandler /** 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity Action: Perform a search for media. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains at least the {@link android.app.SearchManager#QUERY} extra. 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * May also contain any combination of the following extras: 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * EXTRA_MEDIA_ARTIST, EXTRA_MEDIA_ALBUM, EXTRA_MEDIA_TITLE, EXTRA_MEDIA_FOCUS 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.provider.MediaStore#EXTRA_MEDIA_ARTIST 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.provider.MediaStore#EXTRA_MEDIA_ALBUM 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.provider.MediaStore#EXTRA_MEDIA_TITLE 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.provider.MediaStore#EXTRA_MEDIA_FOCUS 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String INTENT_ACTION_MEDIA_SEARCH = "android.intent.action.MEDIA_SEARCH"; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 892fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * An intent to perform a search for music media and automatically play content from the 902fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * result when possible. This can be fired, for example, by the result of a voice recognition 912fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * command to listen to music. 922fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * <p> 932fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * Contains the {@link android.app.SearchManager#QUERY} extra, which is a string 942fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * that can contain any type of unstructured music search, like the name of an artist, 952fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * an album, a song, a genre, or any combination of these. 962fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * <p> 972fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * Because this intent includes an open-ended unstructured search string, it makes the most 982fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * sense for apps that can support large-scale search of music, such as services connected 992fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau * to an online database of music which can be streamed and played on the device. 1002fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau */ 1012fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau public static final String INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH = 1022fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau "android.media.action.MEDIA_PLAY_FROM_SEARCH"; 1032fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau 1042fe6fd055874ff70a9faeaa27716173b12e671fbMike LeBeau /** 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent-extra used to define the artist 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_MEDIA_ARTIST = "android.intent.extra.artist"; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent-extra used to define the album 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_MEDIA_ALBUM = "android.intent.extra.album"; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent-extra used to define the song title 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_MEDIA_TITLE = "android.intent.extra.title"; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent-extra used to define the search focus. The search focus 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * indicates whether the search should be for things related to the artist, album 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or song that is identified by the other extras. 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_MEDIA_FOCUS = "android.intent.extra.focus"; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent-extra used to control the orientation of a ViewImage or a MovieView. 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is an int property that overrides the activity's requestedOrientation. 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_SCREEN_ORIENTATION = "android.intent.extra.screenOrientation"; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of an Intent-extra used to control the UI of a ViewImage. 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a boolean property that overrides the activity's default fullscreen state. 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_FULL_SCREEN = "android.intent.extra.fullScreen"; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of an Intent-extra used to control the UI of a ViewImage. 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a boolean property that specifies whether or not to show action icons. 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_SHOW_ACTION_ICONS = "android.intent.extra.showActionIcons"; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent-extra used to control the onCompletion behavior of a MovieView. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a boolean property that specifies whether or not to finish the MovieView activity 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when the movie completes playing. The default value is true, which means to automatically 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * exit the movie player activity when the movie completes playing. 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_FINISH_ON_COMPLETION = "android.intent.extra.finishOnCompletion"; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent action used to launch a camera in still image mode. 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String INTENT_ACTION_STILL_IMAGE_CAMERA = "android.media.action.STILL_IMAGE_CAMERA"; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent action used to launch a camera in video mode. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String INTENT_ACTION_VIDEO_CAMERA = "android.media.action.VIDEO_CAMERA"; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard Intent action that can be sent to have the camera application 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * capture an image and return it. 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The caller may pass an extra EXTRA_OUTPUT to control where this image will be written. 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the EXTRA_OUTPUT is not present, then a small sized image is returned as a Bitmap 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object in the extra field. This is useful for applications that only need a small image. 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the EXTRA_OUTPUT is present, then the full-sized image will be written to the Uri 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value of EXTRA_OUTPUT. 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EXTRA_OUTPUT 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE"; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard Intent action that can be sent to have the camera application 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * capture an video and return it. 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The caller may pass in an extra EXTRA_VIDEO_QUALITY to control the video quality. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The caller may pass in an extra EXTRA_OUTPUT to control 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * where the video is written. If EXTRA_OUTPUT is not present the video will be 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * written to the standard location for videos, and the Uri of that location will be 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned in the data field of the Uri. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EXTRA_OUTPUT 184e7bc746e67a5b9d9cab34bd4ebe06b977772d356Wu-cheng Li * @see #EXTRA_VIDEO_QUALITY 185e7bc746e67a5b9d9cab34bd4ebe06b977772d356Wu-cheng Li * @see #EXTRA_SIZE_LIMIT 186e7bc746e67a5b9d9cab34bd4ebe06b977772d356Wu-cheng Li * @see #EXTRA_DURATION_LIMIT 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String ACTION_VIDEO_CAPTURE = "android.media.action.VIDEO_CAPTURE"; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent-extra used to control the quality of a recorded video. This is an 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * integer property. Currently value 0 means low quality, suitable for MMS messages, and 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value 1 means high quality. In the future other quality levels may be added. 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String EXTRA_VIDEO_QUALITY = "android.intent.extra.videoQuality"; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Specify the maximum allowed size. 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String EXTRA_SIZE_LIMIT = "android.intent.extra.sizeLimit"; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 203eb0098d8e89033b78017a9e0068e3ac7ca51c112Chih-Chung Chang * Specify the maximum allowed recording duration in seconds. 204eb0098d8e89033b78017a9e0068e3ac7ca51c112Chih-Chung Chang */ 205eb0098d8e89033b78017a9e0068e3ac7ca51c112Chih-Chung Chang public final static String EXTRA_DURATION_LIMIT = "android.intent.extra.durationLimit"; 206eb0098d8e89033b78017a9e0068e3ac7ca51c112Chih-Chung Chang 207eb0098d8e89033b78017a9e0068e3ac7ca51c112Chih-Chung Chang /** 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent-extra used to indicate a content resolver Uri to be used to 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * store the requested image or video. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String EXTRA_OUTPUT = "output"; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 214ed297a8417b1a44cf94ba0e33175a87055088424Marco Nelissen * The string that is used when a media attribute is not known. For example, 215ed297a8417b1a44cf94ba0e33175a87055088424Marco Nelissen * if an audio file does not have any meta data, the artist and album columns 216ed297a8417b1a44cf94ba0e33175a87055088424Marco Nelissen * will be set to this value. 217ed297a8417b1a44cf94ba0e33175a87055088424Marco Nelissen */ 218ed297a8417b1a44cf94ba0e33175a87055088424Marco Nelissen public static final String UNKNOWN_STRING = "<unknown>"; 219ed297a8417b1a44cf94ba0e33175a87055088424Marco Nelissen 220ed297a8417b1a44cf94ba0e33175a87055088424Marco Nelissen /** 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Common fields for most MediaProvider tables 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public interface MediaColumns extends BaseColumns { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The data stream for the file 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: DATA STREAM</P> 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATA = "_data"; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The size of the file in bytes 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String SIZE = "_size"; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The display name of the file 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DISPLAY_NAME = "_display_name"; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The title of the content 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TITLE = "title"; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time the file was added to the media provider 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Units are seconds since 1970. 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE_ADDED = "date_added"; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time the file was last modified 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Units are seconds since 1970. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: This is for internal use by the media scanner. Do not modify this field. 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE_MODIFIED = "date_modified"; 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type of the file 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIME_TYPE = "mime_type"; 269d815f79766984fce499e147ecbacc01914683f74Mike Lockwood 270d815f79766984fce499e147ecbacc01914683f74Mike Lockwood /** 271d815f79766984fce499e147ecbacc01914683f74Mike Lockwood * The MTP object handle of a newly transfered file. 272cbaea35759791f083735f7a5c43e0dc0ed228ff1Mike Lockwood * Used to pass the new file's object handle through the media scanner 273cbaea35759791f083735f7a5c43e0dc0ed228ff1Mike Lockwood * from MTP to the media provider 274cbaea35759791f083735f7a5c43e0dc0ed228ff1Mike Lockwood * For internal use only by MTP, media scanner and media provider. 275d815f79766984fce499e147ecbacc01914683f74Mike Lockwood * <P>Type: INTEGER</P> 276d815f79766984fce499e147ecbacc01914683f74Mike Lockwood * @hide 277d815f79766984fce499e147ecbacc01914683f74Mike Lockwood */ 278cbaea35759791f083735f7a5c43e0dc0ed228ff1Mike Lockwood public static final String MEDIA_SCANNER_NEW_OBJECT_ID = "media_scanner_new_object_id"; 27982428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang 28082428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang /** 28182428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang * Non-zero if the media file is drm-protected 28282428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang * <P>Type: INTEGER (boolean)</P> 28382428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang * @hide 28482428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang */ 28582428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang public static final String IS_DRM = "is_drm"; 28682428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang 287e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang /** 288e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang * The width of the image/video in pixels. 289e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang * @hide 290e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang */ 291e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang public static final String WIDTH = "width"; 292e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang 293e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang /** 294e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang * The height of the image/video in pixels. 295e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang * @hide 296e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang */ 297e1bf8efaff42dc33b7a4663f3c9d50d12de81bcbChih-Chung Chang public static final String HEIGHT = "height"; 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 300d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood /** 3010b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * Media provider table containing an index of all files in the media storage, 3020b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * including non-media files. This should be used by applications that work with 3030b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * non-media file types (text, HTML, PDF, etc) as well as applications that need to 3040b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * work with multiple media file types in a single query. 305d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood */ 3063b2a62e5b35ea5f8da9d9bee52f75c9c2ebb4eceMike Lockwood public static final class Files { 307d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood 3080b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood /** 3090b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * Get the content:// style URI for the files table on the 3100b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * given volume. 3110b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * 3120b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * @param volumeName the name of the volume to get the URI for 3130b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * @return the URI to the files table on the given volume 3140b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood */ 315d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood public static Uri getContentUri(String volumeName) { 316d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 3173b2a62e5b35ea5f8da9d9bee52f75c9c2ebb4eceMike Lockwood "/file"); 318d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood } 319d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood 3200b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood /** 3210b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * Get the content:// style URI for a single row in the files table on the 3220b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * given volume. 3230b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * 3240b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * @param volumeName the name of the volume to get the URI for 3250b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * @param rowId the file to get the URI for 3260b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * @return the URI to the files table on the given volume 3270b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood */ 328d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood public static final Uri getContentUri(String volumeName, 3290b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood long rowId) { 330d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName 3310b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood + "/file/" + rowId); 332d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood } 333d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood 3340b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood /** 3350b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * For use only by the MTP implementation. 3360b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * @hide 3370b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood */ 3388490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood public static Uri getMtpObjectsUri(String volumeName) { 3398490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 3408490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood "/object"); 3418490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood } 3428490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood 3430b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood /** 3440b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * For use only by the MTP implementation. 3450b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * @hide 3460b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood */ 3478490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood public static final Uri getMtpObjectsUri(String volumeName, 3488490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood long fileId) { 3498490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName 3508490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood + "/object/" + fileId); 3518490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood } 3528490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood 3530b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood /** 3540b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * Used to implement the MTP GetObjectReferences and SetObjectReferences commands. 3550b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * @hide 3560b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood */ 3578490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood public static final Uri getMtpReferencesUri(String volumeName, 3583b2a62e5b35ea5f8da9d9bee52f75c9c2ebb4eceMike Lockwood long fileId) { 3599a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName 3608490e66f57506d4e4b05e7c987c7ca34295843e6Mike Lockwood + "/object/" + fileId + "/references"); 3619a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood } 3629a2046fb5ceeee4d5334274cbff15f1058bb3244Mike Lockwood 363d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood /** 364d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood * Fields for master table for all media files. 365d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood * Table also contains MediaColumns._ID, DATA, SIZE and DATE_MODIFIED. 366d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood */ 3673b2a62e5b35ea5f8da9d9bee52f75c9c2ebb4eceMike Lockwood public interface FileColumns extends MediaColumns { 368d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood /** 369b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood * The MTP storage ID of the file 370b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood * <P>Type: INTEGER</P> 371b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood * @hide 372b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood */ 373b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood public static final String STORAGE_ID = "storage_id"; 374b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood 375b239b683765f63d79e74b8ba2a8cc2855f236536Mike Lockwood /** 376d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood * The MTP format code of the file 377d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood * <P>Type: INTEGER</P> 3780b20b77ff5a67a054695954bc65f1c5c473b348bMike Lockwood * @hide 379d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood */ 380d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood public static final String FORMAT = "format"; 381d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood 382d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood /** 383d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood * The index of the parent directory of the file 384d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood * <P>Type: INTEGER</P> 385d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood */ 386d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood public static final String PARENT = "parent"; 387fed161799bb40ea4cda19f5ef6c8c2462a0066e4Mike Lockwood 388fed161799bb40ea4cda19f5ef6c8c2462a0066e4Mike Lockwood /** 389c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood * The MIME type of the file 390c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood * <P>Type: TEXT</P> 391fed161799bb40ea4cda19f5ef6c8c2462a0066e4Mike Lockwood */ 392c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood public static final String MIME_TYPE = "mime_type"; 393fed161799bb40ea4cda19f5ef6c8c2462a0066e4Mike Lockwood 394fed161799bb40ea4cda19f5ef6c8c2462a0066e4Mike Lockwood /** 395c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood * The title of the content 396c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood * <P>Type: TEXT</P> 397fed161799bb40ea4cda19f5ef6c8c2462a0066e4Mike Lockwood */ 398c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood public static final String TITLE = "title"; 399c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 400c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood /** 401c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood * The media type (audio, video, image or playlist) 402c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood * of the file, or 0 for not a media file 403c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood * <P>Type: TEXT</P> 404c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood */ 405c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood public static final String MEDIA_TYPE = "media_type"; 406c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 407c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood /** 408ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood * Constant for the {@link #MEDIA_TYPE} column indicating that file 409ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood * is not an audio, image, video or playlist file. 410c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood */ 411c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood public static final int MEDIA_TYPE_NONE = 0; 412ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood 413ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood /** 414ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood * Constant for the {@link #MEDIA_TYPE} column indicating that file is an image file. 415ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood */ 416c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood public static final int MEDIA_TYPE_IMAGE = 1; 417ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood 418ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood /** 419ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood * Constant for the {@link #MEDIA_TYPE} column indicating that file is an audio file. 420ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood */ 421c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood public static final int MEDIA_TYPE_AUDIO = 2; 422ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood 423ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood /** 424ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood * Constant for the {@link #MEDIA_TYPE} column indicating that file is an video file. 425ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood */ 426c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood public static final int MEDIA_TYPE_VIDEO = 3; 427ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood 428ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood /** 429ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood * Constant for the {@link #MEDIA_TYPE} column indicating that file is an playlist file. 430ed723b4095828fd6e183b650390bc4725e15886fMike Lockwood */ 431c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood public static final int MEDIA_TYPE_PLAYLIST = 4; 432c2206a0710a3ca2c29854c1a0638c5ba55629ba2Mike Lockwood } 433d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood } 434d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 43600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * This class is used internally by Images.Thumbnails and Video.Thumbnails, it's not intended 43700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * to be accessed elsewhere. 43800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 43900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen private static class InternalThumbnails implements BaseColumns { 44000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen private static final int MINI_KIND = 1; 44100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen private static final int FULL_SCREEN_KIND = 2; 44200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen private static final int MICRO_KIND = 3; 44300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen private static final String[] PROJECTION = new String[] {_ID, MediaColumns.DATA}; 44413ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen static final int DEFAULT_GROUP_ID = 0; 4452ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang private static final Object sThumbBufLock = new Object(); 4462ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang private static byte[] sThumbBuf; 44700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 448f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen private static Bitmap getMiniThumbFromFile(Cursor c, Uri baseUri, ContentResolver cr, BitmapFactory.Options options) { 449f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen Bitmap bitmap = null; 450f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen Uri thumbUri = null; 451f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen try { 452f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen long thumbId = c.getLong(0); 453f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen String filePath = c.getString(1); 454f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen thumbUri = ContentUris.withAppendedId(baseUri, thumbId); 455f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen ParcelFileDescriptor pfdInput = cr.openFileDescriptor(thumbUri, "r"); 456f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen bitmap = BitmapFactory.decodeFileDescriptor( 457f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen pfdInput.getFileDescriptor(), null, options); 458f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen pfdInput.close(); 459f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen } catch (FileNotFoundException ex) { 460f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen Log.e(TAG, "couldn't open thumbnail " + thumbUri + "; " + ex); 461f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen } catch (IOException ex) { 462f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen Log.e(TAG, "couldn't open thumbnail " + thumbUri + "; " + ex); 463f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen } catch (OutOfMemoryError ex) { 464f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen Log.e(TAG, "failed to allocate memory for thumbnail " 465f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen + thumbUri + "; " + ex); 466f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen } 467f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen return bitmap; 468f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen } 469f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen 47000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 471b994419263fb4f595379838f62efc50f90565e20Ray Chen * This method cancels the thumbnail request so clients waiting for getThumbnail will be 472b994419263fb4f595379838f62efc50f90565e20Ray Chen * interrupted and return immediately. Only the original process which made the getThumbnail 473b994419263fb4f595379838f62efc50f90565e20Ray Chen * requests can cancel their own requests. 474b994419263fb4f595379838f62efc50f90565e20Ray Chen * 475b994419263fb4f595379838f62efc50f90565e20Ray Chen * @param cr ContentResolver 476ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027Ray Chen * @param origId original image or video id. use -1 to cancel all requests. 47713ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param groupId the same groupId used in getThumbnail 478b994419263fb4f595379838f62efc50f90565e20Ray Chen * @param baseUri the base URI of requested thumbnails 479b994419263fb4f595379838f62efc50f90565e20Ray Chen */ 48013ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen static void cancelThumbnailRequest(ContentResolver cr, long origId, Uri baseUri, 48113ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen long groupId) { 482b994419263fb4f595379838f62efc50f90565e20Ray Chen Uri cancelUri = baseUri.buildUpon().appendQueryParameter("cancel", "1") 48313ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen .appendQueryParameter("orig_id", String.valueOf(origId)) 48413ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen .appendQueryParameter("group_id", String.valueOf(groupId)).build(); 485b994419263fb4f595379838f62efc50f90565e20Ray Chen Cursor c = null; 486b994419263fb4f595379838f62efc50f90565e20Ray Chen try { 487b994419263fb4f595379838f62efc50f90565e20Ray Chen c = cr.query(cancelUri, PROJECTION, null, null, null); 488b994419263fb4f595379838f62efc50f90565e20Ray Chen } 489b994419263fb4f595379838f62efc50f90565e20Ray Chen finally { 490b994419263fb4f595379838f62efc50f90565e20Ray Chen if (c != null) c.close(); 491b994419263fb4f595379838f62efc50f90565e20Ray Chen } 492b994419263fb4f595379838f62efc50f90565e20Ray Chen } 493b994419263fb4f595379838f62efc50f90565e20Ray Chen /** 49400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * This method ensure thumbnails associated with origId are generated and decode the byte 49500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * stream from database (MICRO_KIND) or file (MINI_KIND). 49600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * 49700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * Special optimization has been done to avoid further IPC communication for MICRO_KIND 49800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * thumbnails. 49900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * 50000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param cr ContentResolver 50100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param origId original image or video id 50200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param kind could be MINI_KIND or MICRO_KIND 50300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param options this is only used for MINI_KIND when decoding the Bitmap 50400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param baseUri the base URI of requested thumbnails 50513ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param groupId the id of group to which this request belongs 50600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @return Bitmap bitmap of specified thumbnail kind 50700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 50813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen static Bitmap getThumbnail(ContentResolver cr, long origId, long groupId, int kind, 50900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen BitmapFactory.Options options, Uri baseUri, boolean isVideo) { 51000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen Bitmap bitmap = null; 51100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen String filePath = null; 512b994419263fb4f595379838f62efc50f90565e20Ray Chen // Log.v(TAG, "getThumbnail: origId="+origId+", kind="+kind+", isVideo="+isVideo); 513f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen // If the magic is non-zero, we simply return thumbnail if it does exist. 51400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen // querying MediaProvider and simply return thumbnail. 5151ba38b600e181168c8897220048027a164c68b10Ray Chen MiniThumbFile thumbFile = new MiniThumbFile(isVideo ? Video.Media.EXTERNAL_CONTENT_URI 5161ba38b600e181168c8897220048027a164c68b10Ray Chen : Images.Media.EXTERNAL_CONTENT_URI); 5171ba38b600e181168c8897220048027a164c68b10Ray Chen Cursor c = null; 5181ba38b600e181168c8897220048027a164c68b10Ray Chen try { 5191ba38b600e181168c8897220048027a164c68b10Ray Chen long magic = thumbFile.getMagic(origId); 5201ba38b600e181168c8897220048027a164c68b10Ray Chen if (magic != 0) { 5211ba38b600e181168c8897220048027a164c68b10Ray Chen if (kind == MICRO_KIND) { 5229439241d35afc203d47b327619a49b5d70cf722bChih-Chung Chang synchronized (sThumbBufLock) { 5239439241d35afc203d47b327619a49b5d70cf722bChih-Chung Chang if (sThumbBuf == null) { 5249439241d35afc203d47b327619a49b5d70cf722bChih-Chung Chang sThumbBuf = new byte[MiniThumbFile.BYTES_PER_MINTHUMB]; 5259439241d35afc203d47b327619a49b5d70cf722bChih-Chung Chang } 5269439241d35afc203d47b327619a49b5d70cf722bChih-Chung Chang if (thumbFile.getMiniThumbFromFile(origId, sThumbBuf) != null) { 5279439241d35afc203d47b327619a49b5d70cf722bChih-Chung Chang bitmap = BitmapFactory.decodeByteArray(sThumbBuf, 0, sThumbBuf.length); 5289439241d35afc203d47b327619a49b5d70cf722bChih-Chung Chang if (bitmap == null) { 5299439241d35afc203d47b327619a49b5d70cf722bChih-Chung Chang Log.w(TAG, "couldn't decode byte array."); 5309439241d35afc203d47b327619a49b5d70cf722bChih-Chung Chang } 5311ba38b600e181168c8897220048027a164c68b10Ray Chen } 53200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 5331ba38b600e181168c8897220048027a164c68b10Ray Chen return bitmap; 5341ba38b600e181168c8897220048027a164c68b10Ray Chen } else if (kind == MINI_KIND) { 5351ba38b600e181168c8897220048027a164c68b10Ray Chen String column = isVideo ? "video_id=" : "image_id="; 536f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen c = cr.query(baseUri, PROJECTION, column + origId, null, null); 537f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen if (c != null && c.moveToFirst()) { 538f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen bitmap = getMiniThumbFromFile(c, baseUri, cr, options); 539f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen if (bitmap != null) { 540f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen return bitmap; 541f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen } 542f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen } 543f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen } 54400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 54500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 54600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen Uri blockingUri = baseUri.buildUpon().appendQueryParameter("blocking", "1") 54713ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen .appendQueryParameter("orig_id", String.valueOf(origId)) 54813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen .appendQueryParameter("group_id", String.valueOf(groupId)).build(); 5491ba38b600e181168c8897220048027a164c68b10Ray Chen if (c != null) c.close(); 55000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen c = cr.query(blockingUri, PROJECTION, null, null, null); 55100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen // This happens when original image/video doesn't exist. 55200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen if (c == null) return null; 55300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 55400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen // Assuming thumbnail has been generated, at least original image exists. 55500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen if (kind == MICRO_KIND) { 5562ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang synchronized (sThumbBufLock) { 5572ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang if (sThumbBuf == null) { 5582ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang sThumbBuf = new byte[MiniThumbFile.BYTES_PER_MINTHUMB]; 5592ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang } 5602ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang if (thumbFile.getMiniThumbFromFile(origId, sThumbBuf) != null) { 5612ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang bitmap = BitmapFactory.decodeByteArray(sThumbBuf, 0, sThumbBuf.length); 5622ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang if (bitmap == null) { 5632ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang Log.w(TAG, "couldn't decode byte array."); 5642ca36196ea97d14cd0ef24439204f6725966d9d7Chih-Chung Chang } 56500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 56600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 56700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } else if (kind == MINI_KIND) { 56800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen if (c.moveToFirst()) { 569f9a243d4a8052ddaec611852d4877ba6262373f4Ray Chen bitmap = getMiniThumbFromFile(c, baseUri, cr, options); 57000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 57100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } else { 57200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen throw new IllegalArgumentException("Unsupported kind: " + kind); 57300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 57400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 57500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen // We probably run out of space, so create the thumbnail in memory. 57600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen if (bitmap == null) { 57744dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen Log.v(TAG, "Create the thumbnail in memory: origId=" + origId 57844dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen + ", kind=" + kind + ", isVideo="+isVideo); 57900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen Uri uri = Uri.parse( 58000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen baseUri.buildUpon().appendPath(String.valueOf(origId)) 58100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen .toString().replaceFirst("thumbnails", "media")); 582ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027Ray Chen if (filePath == null) { 5839b150b74573ce506abd00c692fb42f46980441a3Marco Nelissen if (c != null) c.close(); 58400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen c = cr.query(uri, PROJECTION, null, null, null); 585ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027Ray Chen if (c == null || !c.moveToFirst()) { 586ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027Ray Chen return null; 587ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027Ray Chen } 588ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027Ray Chen filePath = c.getString(1); 589ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027Ray Chen } 590ef093cd6c4ab4d3c8a1c8be5ed7147d5f06d7027Ray Chen if (isVideo) { 59144dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen bitmap = ThumbnailUtils.createVideoThumbnail(filePath, kind); 59200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } else { 59344dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen bitmap = ThumbnailUtils.createImageThumbnail(filePath, kind); 59400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 59500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 59600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } catch (SQLiteException ex) { 59700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen Log.w(TAG, ex); 59800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } finally { 59900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen if (c != null) c.close(); 6001ba38b600e181168c8897220048027a164c68b10Ray Chen // To avoid file descriptor leak in application process. 6011ba38b600e181168c8897220048027a164c68b10Ray Chen thumbFile.deactivate(); 6021ba38b600e181168c8897220048027a164c68b10Ray Chen thumbFile = null; 60300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 60400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen return bitmap; 60500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 60600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 60700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 60800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains meta data for all available images. 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 61100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final class Images { 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface ImageColumns extends MediaColumns { 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The description of the image 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DESCRIPTION = "description"; 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The picasa id of the image 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String PICASA_ID = "picasa_id"; 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Whether the video should be published as public or private 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String IS_PRIVATE = "isprivate"; 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The latitude where the image was captured. 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: DOUBLE</P> 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LATITUDE = "latitude"; 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The longitude where the image was captured. 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: DOUBLE</P> 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LONGITUDE = "longitude"; 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The date & time that the image was taken in units 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of milliseconds since jan 1, 1970. 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE_TAKEN = "datetaken"; 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The orientation for the image expressed as degrees. 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Only degrees 0, 90, 180, 270 will work. 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ORIENTATION = "orientation"; 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The mini thumb id. 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MINI_THUMB_MAGIC = "mini_thumb_magic"; 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The bucket id of the image. This is a read-only property that 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is automatically computed from the DATA column. 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BUCKET_ID = "bucket_id"; 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The bucket display name of the image. This is a read-only property that 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is automatically computed from the DATA column. 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BUCKET_DISPLAY_NAME = "bucket_display_name"; 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Media implements ImageColumns { 67900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final Cursor query(ContentResolver cr, Uri uri, String[] projection) { 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cr.query(uri, projection, null, null, DEFAULT_SORT_ORDER); 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Cursor query(ContentResolver cr, Uri uri, String[] projection, 68400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen String where, String orderBy) { 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cr.query(uri, projection, where, 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, orderBy == null ? DEFAULT_SORT_ORDER : orderBy); 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Cursor query(ContentResolver cr, Uri uri, String[] projection, 69000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen String selection, String [] selectionArgs, String orderBy) { 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cr.query(uri, projection, selection, 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project selectionArgs, orderBy == null ? DEFAULT_SORT_ORDER : orderBy); 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieves an image for the given url as a {@link Bitmap}. 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The content resolver to use 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The url of the image 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws FileNotFoundException 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IOException 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Bitmap getBitmap(ContentResolver cr, Uri url) 70400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen throws FileNotFoundException, IOException { 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InputStream input = cr.openInputStream(url); 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bitmap = BitmapFactory.decodeStream(input); 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.close(); 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return bitmap; 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Insert an image and create a thumbnail for it. 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The content resolver to use 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param imagePath The path to the image to insert 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name The name of the image 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param description The description of the image 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The URL to the newly created image 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws FileNotFoundException 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 72100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final String insertImage(ContentResolver cr, String imagePath, 72200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen String name, String description) throws FileNotFoundException { 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Check if file exists with a FileInputStream 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FileInputStream stream = new FileInputStream(imagePath); 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 7262f189fa0f75d6899b9fa7db11f5301bc7850b744Marco Nelissen Bitmap bm = BitmapFactory.decodeFile(imagePath); 7272f189fa0f75d6899b9fa7db11f5301bc7850b744Marco Nelissen String ret = insertImage(cr, bm, name, description); 7282f189fa0f75d6899b9fa7db11f5301bc7850b744Marco Nelissen bm.recycle(); 7292f189fa0f75d6899b9fa7db11f5301bc7850b744Marco Nelissen return ret; 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stream.close(); 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IOException e) { 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final Bitmap StoreThumbnail( 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver cr, 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap source, 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long id, 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float width, float height, 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int kind) { 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // create the matrix to scale it 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Matrix matrix = new Matrix(); 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float scaleX = width / source.getWidth(); 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float scaleY = height / source.getHeight(); 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project matrix.setScale(scaleX, scaleY); 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap thumb = Bitmap.createBitmap(source, 0, 0, 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project source.getWidth(), 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project source.getHeight(), matrix, 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project true); 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(4); 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Images.Thumbnails.KIND, kind); 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Images.Thumbnails.IMAGE_ID, (int)id); 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Images.Thumbnails.HEIGHT, thumb.getHeight()); 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Images.Thumbnails.WIDTH, thumb.getWidth()); 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri url = cr.insert(Images.Thumbnails.EXTERNAL_CONTENT_URI, values); 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OutputStream thumbOut = cr.openOutputStream(url); 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thumb.compress(Bitmap.CompressFormat.JPEG, 100, thumbOut); 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thumbOut.close(); 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return thumb; 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project catch (FileNotFoundException ex) { 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project catch (IOException ex) { 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Insert an image and create a thumbnail for it. 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The content resolver to use 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param source The stream to use for the image 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param title The name of the image 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param description The description of the image 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The URL to the newly created image, or <code>null</code> if the image failed to be stored 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for any reason. 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String insertImage(ContentResolver cr, Bitmap source, 79100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen String title, String description) { 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(); 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Images.Media.TITLE, title); 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Images.Media.DESCRIPTION, description); 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Images.Media.MIME_TYPE, "image/jpeg"); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri url = null; 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String stringUrl = null; /* value to be returned */ 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 80000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen try { 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project url = cr.insert(EXTERNAL_CONTENT_URI, values); 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (source != null) { 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OutputStream imageOut = cr.openOutputStream(url); 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project source.compress(Bitmap.CompressFormat.JPEG, 50, imageOut); 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project imageOut.close(); 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long id = ContentUris.parseId(url); 81244dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen // Wait until MINI_KIND thumbnail is generated. 81344dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen Bitmap miniThumb = Images.Thumbnails.getThumbnail(cr, id, 81444dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen Images.Thumbnails.MINI_KIND, null); 81544dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen // This is for backward compatibility. 81644dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen Bitmap microThumb = StoreThumbnail(cr, miniThumb, id, 50F, 50F, 81744dcf658718fcc0b563dcad50fb59e8fe507cd0aRay Chen Images.Thumbnails.MICRO_KIND); 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(TAG, "Failed to create thumbnail, removing original"); 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cr.delete(url, null, null); 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project url = null; 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(TAG, "Failed to insert image", e); 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (url != null) { 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cr.delete(url, null, null); 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project url = null; 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (url != null) { 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stringUrl = url.toString(); 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return stringUrl; 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the content:// style URI for the image media table on the 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given volume. 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param volumeName the name of the volume to get the URI for 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the URI to the image media table on the given volume 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getContentUri(String volumeName) { 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "/images/media"); 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the internal storage. 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri INTERNAL_CONTENT_URI = 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("internal"); 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the "primary" external storage 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume. 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri EXTERNAL_CONTENT_URI = 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("external"); 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type of of this directory of 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * images. Note that each entry in this directory will have a standard 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * image MIME type as appropriate -- for example, image/jpeg. 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TYPE = "vnd.android.cursor.dir/image"; 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = ImageColumns.BUCKET_DISPLAY_NAME; 87400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 87600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 87700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * This class allows developers to query and get two kinds of thumbnails: 87800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * MINI_KIND: 512 x 384 thumbnail 87900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * MICRO_KIND: 96 x 96 thumbnail 88000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 88100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static class Thumbnails implements BaseColumns { 88200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final Cursor query(ContentResolver cr, Uri uri, String[] projection) { 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cr.query(uri, projection, null, null, DEFAULT_SORT_ORDER); 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 88600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final Cursor queryMiniThumbnails(ContentResolver cr, Uri uri, int kind, 88700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen String[] projection) { 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cr.query(uri, projection, "kind = " + kind, null, DEFAULT_SORT_ORDER); 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 89100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final Cursor queryMiniThumbnail(ContentResolver cr, long origId, int kind, 89200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen String[] projection) { 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cr.query(EXTERNAL_CONTENT_URI, projection, 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IMAGE_ID + " = " + origId + " AND " + KIND + " = " + 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kind, null, null); 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 899b994419263fb4f595379838f62efc50f90565e20Ray Chen * This method cancels the thumbnail request so clients waiting for getThumbnail will be 900b994419263fb4f595379838f62efc50f90565e20Ray Chen * interrupted and return immediately. Only the original process which made the getThumbnail 901b994419263fb4f595379838f62efc50f90565e20Ray Chen * requests can cancel their own requests. 902b994419263fb4f595379838f62efc50f90565e20Ray Chen * 903b994419263fb4f595379838f62efc50f90565e20Ray Chen * @param cr ContentResolver 904b994419263fb4f595379838f62efc50f90565e20Ray Chen * @param origId original image id 905b994419263fb4f595379838f62efc50f90565e20Ray Chen */ 906b994419263fb4f595379838f62efc50f90565e20Ray Chen public static void cancelThumbnailRequest(ContentResolver cr, long origId) { 90713ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen InternalThumbnails.cancelThumbnailRequest(cr, origId, EXTERNAL_CONTENT_URI, 90813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen InternalThumbnails.DEFAULT_GROUP_ID); 909b994419263fb4f595379838f62efc50f90565e20Ray Chen } 910b994419263fb4f595379838f62efc50f90565e20Ray Chen 911b994419263fb4f595379838f62efc50f90565e20Ray Chen /** 91200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * This method checks if the thumbnails of the specified image (origId) has been created. 91300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * It will be blocked until the thumbnails are generated. 91400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * 91500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param cr ContentResolver used to dispatch queries to MediaProvider. 91600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param origId Original image id associated with thumbnail of interest. 91700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param kind The type of thumbnail to fetch. Should be either MINI_KIND or MICRO_KIND. 91800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param options this is only used for MINI_KIND when decoding the Bitmap 91900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @return A Bitmap instance. It could be null if the original image 92000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * associated with origId doesn't exist or memory is not enough. 92100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 92200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static Bitmap getThumbnail(ContentResolver cr, long origId, int kind, 92300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen BitmapFactory.Options options) { 92413ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen return InternalThumbnails.getThumbnail(cr, origId, 92513ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen InternalThumbnails.DEFAULT_GROUP_ID, kind, options, 92613ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen EXTERNAL_CONTENT_URI, false); 92713ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen } 92813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen 92913ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen /** 93013ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * This method cancels the thumbnail request so clients waiting for getThumbnail will be 93113ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * interrupted and return immediately. Only the original process which made the getThumbnail 93213ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * requests can cancel their own requests. 93313ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * 93413ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param cr ContentResolver 93513ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param origId original image id 93613ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param groupId the same groupId used in getThumbnail. 93713ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen */ 93813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen public static void cancelThumbnailRequest(ContentResolver cr, long origId, long groupId) { 93913ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen InternalThumbnails.cancelThumbnailRequest(cr, origId, EXTERNAL_CONTENT_URI, groupId); 94013ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen } 94113ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen 94213ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen /** 94313ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * This method checks if the thumbnails of the specified image (origId) has been created. 94413ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * It will be blocked until the thumbnails are generated. 94513ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * 94613ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param cr ContentResolver used to dispatch queries to MediaProvider. 94713ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param origId Original image id associated with thumbnail of interest. 94813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param groupId the id of group to which this request belongs 94913ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param kind The type of thumbnail to fetch. Should be either MINI_KIND or MICRO_KIND. 95013ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param options this is only used for MINI_KIND when decoding the Bitmap 95113ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @return A Bitmap instance. It could be null if the original image 95213ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * associated with origId doesn't exist or memory is not enough. 95313ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen */ 95413ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen public static Bitmap getThumbnail(ContentResolver cr, long origId, long groupId, 95513ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen int kind, BitmapFactory.Options options) { 95613ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen return InternalThumbnails.getThumbnail(cr, origId, groupId, kind, options, 95700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen EXTERNAL_CONTENT_URI, false); 95800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 95900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 96000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the content:// style URI for the image media table on the 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given volume. 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param volumeName the name of the volume to get the URI for 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the URI to the image media table on the given volume 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getContentUri(String volumeName) { 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "/images/thumbnails"); 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the internal storage. 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri INTERNAL_CONTENT_URI = 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("internal"); 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the "primary" external storage 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume. 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri EXTERNAL_CONTENT_URI = 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("external"); 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = "image_id ASC"; 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The data stream for the thumbnail 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: DATA STREAM</P> 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATA = "_data"; 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The original image for the thumbnal 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (ID from Images table)</P> 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String IMAGE_ID = "image_id"; 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The kind of the thumbnail 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (One of the values below)</P> 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String KIND = "kind"; 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MINI_KIND = 1; 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FULL_SCREEN_KIND = 2; 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MICRO_KIND = 3; 101100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 101200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * The blob raw data of thumbnail 101300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * <P>Type: DATA STREAM</P> 101400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 101500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final String THUMB_DATA = "thumb_data"; 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The width of the thumbnal 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String WIDTH = "width"; 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The height of the thumbnail 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String HEIGHT = "height"; 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Container for all audio content. 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Audio { 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Columns for audio file that show up in multiple tables. 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface AudioColumns extends MediaColumns { 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A non human readable key calculated from the TITLE, used for 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * searching, sorting and grouping 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TITLE_KEY = "title_key"; 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The duration of the audio file, in ms 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DURATION = "duration"; 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The position, in ms, playback was at when playback for this file 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * was last stopped. 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BOOKMARK = "bookmark"; 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The id of the artist who created the audio file, if any 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ARTIST_ID = "artist_id"; 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The artist who created the audio file, if any 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ARTIST = "artist"; 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1073abc2819328c32f2f66506d342c5f560da5107889Marco Nelissen * The artist credited for the album that contains the audio file 1074abc2819328c32f2f66506d342c5f560da5107889Marco Nelissen * <P>Type: TEXT</P> 1075abc2819328c32f2f66506d342c5f560da5107889Marco Nelissen * @hide 1076abc2819328c32f2f66506d342c5f560da5107889Marco Nelissen */ 1077abc2819328c32f2f66506d342c5f560da5107889Marco Nelissen public static final String ALBUM_ARTIST = "album_artist"; 1078abc2819328c32f2f66506d342c5f560da5107889Marco Nelissen 1079abc2819328c32f2f66506d342c5f560da5107889Marco Nelissen /** 1080ee35aff74494e6c0b718e219427af6a6c573b928Marco Nelissen * Whether the song is part of a compilation 1081ee35aff74494e6c0b718e219427af6a6c573b928Marco Nelissen * <P>Type: TEXT</P> 1082ee35aff74494e6c0b718e219427af6a6c573b928Marco Nelissen * @hide 1083ee35aff74494e6c0b718e219427af6a6c573b928Marco Nelissen */ 1084ee35aff74494e6c0b718e219427af6a6c573b928Marco Nelissen public static final String COMPILATION = "compilation"; 1085ee35aff74494e6c0b718e219427af6a6c573b928Marco Nelissen 1086ee35aff74494e6c0b718e219427af6a6c573b928Marco Nelissen /** 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A non human readable key calculated from the ARTIST, used for 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * searching, sorting and grouping 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ARTIST_KEY = "artist_key"; 10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The composer of the audio file, if any 10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String COMPOSER = "composer"; 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The id of the album the audio file is from, if any 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALBUM_ID = "album_id"; 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The album the audio file is from, if any 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALBUM = "album"; 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A non human readable key calculated from the ALBUM, used for 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * searching, sorting and grouping 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALBUM_KEY = "album_key"; 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The track number of this song on the album, if any. 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This number encodes both the track number and the 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * disc number. For multi-disc sets, this number will 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be 1xxx for tracks on the first disc, 2xxx for tracks 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the second disc, etc. 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TRACK = "track"; 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The year the audio file was recorded, if any 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String YEAR = "year"; 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Non-zero if the audio file is music 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String IS_MUSIC = "is_music"; 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Non-zero if the audio file is a podcast 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String IS_PODCAST = "is_podcast"; 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 114782428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang * Non-zero if the audio file may be a ringtone 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String IS_RINGTONE = "is_ringtone"; 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 115382428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang * Non-zero if the audio file may be an alarm 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String IS_ALARM = "is_alarm"; 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 115982428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang * Non-zero if the audio file may be a notification sound 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String IS_NOTIFICATION = "is_notification"; 1163e5d0495d5206167c597efcd81436a0f881f069f9Mike Lockwood 1164e5d0495d5206167c597efcd81436a0f881f069f9Mike Lockwood /** 1165e5d0495d5206167c597efcd81436a0f881f069f9Mike Lockwood * The genre of the audio file, if any 1166e5d0495d5206167c597efcd81436a0f881f069f9Mike Lockwood * <P>Type: TEXT</P> 1167e5d0495d5206167c597efcd81436a0f881f069f9Mike Lockwood * Does not exist in the database - only used by the media scanner for inserts. 1168e5d0495d5206167c597efcd81436a0f881f069f9Mike Lockwood * @hide 1169e5d0495d5206167c597efcd81436a0f881f069f9Mike Lockwood */ 1170e5d0495d5206167c597efcd81436a0f881f069f9Mike Lockwood public static final String GENRE = "genre"; 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Converts a name to a "key" that can be used for grouping, sorting 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and searching. 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The rules that govern this conversion are: 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - remove 'special' characters like ()[]'!?., 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - remove leading/trailing spaces 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - convert everything to lowercase 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - remove leading "the ", "an " and "a " 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - remove trailing ", the|an|a" 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - remove accents. This step leaves us with CollationKey data, 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which is not human readable 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name The artist or album name to convert 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The "key" for the given name. 11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static String keyFor(String name) { 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name != null) { 1190816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen boolean sortfirst = false; 11919a488b44cb479bc42375d2cfcdd4aa6161dc17cfMarco Nelissen if (name.equals(UNKNOWN_STRING)) { 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "\001"; 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1194816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen // Check if the first character is \001. We use this to 1195816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen // force sorting of certain special files, like the silent ringtone. 1196816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen if (name.startsWith("\001")) { 1197816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen sortfirst = true; 1198816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen } 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name = name.trim().toLowerCase(); 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.startsWith("the ")) { 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name = name.substring(4); 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.startsWith("an ")) { 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name = name.substring(3); 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.startsWith("a ")) { 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name = name.substring(2); 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.endsWith(", the") || name.endsWith(",the") || 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name.endsWith(", an") || name.endsWith(",an") || 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name.endsWith(", a") || name.endsWith(",a")) { 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name = name.substring(0, name.lastIndexOf(',')); 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1214e754e128e6237ea1c5b263ec2a02b0413851cfbaMarco Nelissen name = name.replaceAll("[\\[\\]\\(\\)\"'.,?!]", "").trim(); 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.length() > 0) { 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Insert a separator between the characters to avoid 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // matches on a partial character. If we ever change 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // to start-of-word-only matches, this can be removed. 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder b = new StringBuilder(); 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append('.'); 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nl = name.length(); 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < nl; i++) { 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(name.charAt(i)); 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append('.'); 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project name = b.toString(); 1227816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen String key = DatabaseUtils.getCollationKey(name); 1228816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen if (sortfirst) { 1229816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen key = "\001" + key; 1230816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen } 1231816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen return key; 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ""; 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Media implements AudioColumns { 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the content:// style URI for the audio media table on the 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given volume. 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param volumeName the name of the volume to get the URI for 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the URI to the audio media table on the given volume 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getContentUri(String volumeName) { 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "/audio/media"); 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getContentUriForPath(String path) { 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (path.startsWith(Environment.getExternalStorageDirectory().getPath()) ? 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EXTERNAL_CONTENT_URI : INTERNAL_CONTENT_URI); 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the internal storage. 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri INTERNAL_CONTENT_URI = 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("internal"); 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the "primary" external storage 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume. 12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri EXTERNAL_CONTENT_URI = 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("external"); 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for this table. 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TYPE = "vnd.android.cursor.dir/audio"; 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1278816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen public static final String DEFAULT_SORT_ORDER = TITLE_KEY; 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity Action: Start SoundRecorder application. 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Input: nothing. 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Output: An uri to the recorded sound stored in the Media Library 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if the recording was successful. 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * May also contain the extra EXTRA_MAX_BYTES. 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EXTRA_MAX_BYTES 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String RECORD_SOUND_ACTION = 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android.provider.MediaStore.RECORD_SOUND"; 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Intent-extra used to define a maximum file size for 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a recording made by the SoundRecorder application. 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RECORD_SOUND_ACTION 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXTRA_MAX_BYTES = 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android.provider.MediaStore.extra.MAX_BYTES"; 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Columns representing an audio genre 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface GenresColumns { 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the genre 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NAME = "name"; 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains all genres for audio files 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Genres implements BaseColumns, GenresColumns { 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the content:// style URI for the audio genres table on the 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given volume. 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param volumeName the name of the volume to get the URI for 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the URI to the audio genres table on the given volume 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getContentUri(String volumeName) { 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "/audio/genres"); 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1329bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood * Get the content:// style URI for querying the genres of an audio file. 1330bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood * 1331bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood * @param volumeName the name of the volume to get the URI for 1332bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood * @param audioId the ID of the audio file for which to retrieve the genres 1333bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood * @return the URI to for querying the genres for the audio file 1334bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood * with the given the volume and audioID 1335bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood */ 1336bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood public static Uri getContentUriForAudioId(String volumeName, int audioId) { 1337bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 1338bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood "/audio/media/" + audioId + "/genres"); 1339bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood } 1340bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood 1341bdb05df757847ebf343ad332f319a97f7482957cMike Lockwood /** 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the internal storage. 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri INTERNAL_CONTENT_URI = 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("internal"); 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the "primary" external storage 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume. 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri EXTERNAL_CONTENT_URI = 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("external"); 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for this table. 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TYPE = "vnd.android.cursor.dir/genre"; 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for entries in this table. 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/genre"; 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = NAME; 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sub-directory of each genre containing all members. 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Members implements AudioColumns { 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri getContentUri(String volumeName, 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long genreId) { 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "/audio/genres/" + genreId + "/members"); 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A subdirectory of each genre containing all member audio files. 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_DIRECTORY = "members"; 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1388816cf52abd8f45770f0ac922bbb819184ed4b90fMarco Nelissen public static final String DEFAULT_SORT_ORDER = TITLE_KEY; 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID of the audio file 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String AUDIO_ID = "audio_id"; 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID of the genre 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String GENRE_ID = "genre_id"; 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Columns representing a playlist 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface PlaylistsColumns { 14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the playlist 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NAME = "name"; 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The data stream for the playlist file 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: DATA STREAM</P> 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATA = "_data"; 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time the file was added to the media provider 14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Units are seconds since 1970. 14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE_ADDED = "date_added"; 14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time the file was last modified 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Units are seconds since 1970. 14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: This is for internal use by the media scanner. Do not modify this field. 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE_MODIFIED = "date_modified"; 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains playlists for audio files 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Playlists implements BaseColumns, 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PlaylistsColumns { 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the content:// style URI for the audio playlists table on the 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given volume. 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param volumeName the name of the volume to get the URI for 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the URI to the audio playlists table on the given volume 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getContentUri(String volumeName) { 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "/audio/playlists"); 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the internal storage. 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri INTERNAL_CONTENT_URI = 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("internal"); 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the "primary" external storage 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume. 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri EXTERNAL_CONTENT_URI = 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("external"); 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for this table. 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TYPE = "vnd.android.cursor.dir/playlist"; 14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for entries in this table. 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/playlist"; 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = NAME; 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sub-directory of each playlist containing all members. 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Members implements AudioColumns { 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri getContentUri(String volumeName, 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long playlistId) { 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "/audio/playlists/" + playlistId + "/members"); 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1492e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen * Convenience method to move a playlist item to a new location 1493e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen * @param res The content resolver to use 1494e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen * @param playlistId The numeric id of the playlist 1495e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen * @param from The position of the item to move 1496e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen * @param to The position to move the item to 1497e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen * @return true on success 1498e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen */ 1499e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen public static final boolean moveItem(ContentResolver res, 1500e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen long playlistId, int from, int to) { 1501e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", 1502e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen playlistId) 1503e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen .buildUpon() 1504e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen .appendEncodedPath(String.valueOf(from)) 1505e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen .appendQueryParameter("move", "true") 1506e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen .build(); 1507e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen ContentValues values = new ContentValues(); 1508e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, to); 1509e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen return res.update(uri, values, null, null) != 0; 1510e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen } 1511e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen 1512e3d05fcf396fd0e48a0741df4ddb77533fe934b3Marco Nelissen /** 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID within the playlist. 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String _ID = "_id"; 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A subdirectory of each playlist containing all member audio 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * files. 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_DIRECTORY = "members"; 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID of the audio file 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String AUDIO_ID = "audio_id"; 15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID of the playlist 15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String PLAYLIST_ID = "playlist_id"; 15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The order of the songs in the playlist 15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)></P> 15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String PLAY_ORDER = "play_order"; 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = PLAY_ORDER; 15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Columns representing an artist 15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface ArtistColumns { 15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The artist who created the audio file, if any 15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ARTIST = "artist"; 15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A non human readable key calculated from the ARTIST, used for 15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * searching, sorting and grouping 15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ARTIST_KEY = "artist_key"; 15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The number of albums in the database for this artist 15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NUMBER_OF_ALBUMS = "number_of_albums"; 15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The number of albums in the database for this artist 15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NUMBER_OF_TRACKS = "number_of_tracks"; 15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains artists for audio files 15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Artists implements BaseColumns, ArtistColumns { 15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the content:// style URI for the artists table on the 15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given volume. 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param volumeName the name of the volume to get the URI for 15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the URI to the audio artists table on the given volume 15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getContentUri(String volumeName) { 15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "/audio/artists"); 15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the internal storage. 15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri INTERNAL_CONTENT_URI = 15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("internal"); 15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the "primary" external storage 16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume. 16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri EXTERNAL_CONTENT_URI = 16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("external"); 16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for this table. 16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TYPE = "vnd.android.cursor.dir/artists"; 16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for entries in this table. 16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/artist"; 16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 16179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = ARTIST_KEY; 16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sub-directory of each artist containing all albums on which 16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a song by the artist appears. 16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Albums implements AlbumColumns { 16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri getContentUri(String volumeName, 16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long artistId) { 16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName 16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "/audio/artists/" + artistId + "/albums"); 16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Columns representing an album 16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface AlbumColumns { 16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The id for the album 16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALBUM_ID = "album_id"; 16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The album on which the audio file appears, if any 16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALBUM = "album"; 16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The artist whose songs appear on this album 16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ARTIST = "artist"; 16559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The number of songs on this album 16589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NUMBER_OF_SONGS = "numsongs"; 16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This column is available when getting album info via artist, 16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and indicates the number of songs on the album by the given 16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * artist. 16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NUMBER_OF_SONGS_FOR_ARTIST = "numsongs_by_artist"; 16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1671f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler * The year in which the earliest songs 1672f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler * on this album were released. This will often 1673f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler * be the same as {@link #LAST_YEAR}, but for compilation albums 1674f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler * they might differ. 16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String FIRST_YEAR = "minyear"; 167800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 1679f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler /** 1680f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler * The year in which the latest songs 1681f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler * on this album were released. This will often 1682f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler * be the same as {@link #FIRST_YEAR}, but for compilation albums 1683f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler * they might differ. 1684f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler * <P>Type: INTEGER</P> 1685f8a7ceaef2e7d5cd530c9426bde91b6fa9a40b75Andy Stadler */ 16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LAST_YEAR = "maxyear"; 16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A non human readable key calculated from the ALBUM, used for 16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * searching, sorting and grouping 16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALBUM_KEY = "album_key"; 16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Cached album art. 16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALBUM_ART = "album_art"; 17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains artists for audio files 17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Albums implements BaseColumns, AlbumColumns { 17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the content:// style URI for the albums table on the 17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given volume. 17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param volumeName the name of the volume to get the URI for 17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the URI to the audio albums table on the given volume 17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getContentUri(String volumeName) { 17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "/audio/albums"); 17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the internal storage. 17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri INTERNAL_CONTENT_URI = 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("internal"); 17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the "primary" external storage 17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume. 17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri EXTERNAL_CONTENT_URI = 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("external"); 17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for this table. 17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TYPE = "vnd.android.cursor.dir/albums"; 17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for entries in this table. 17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/album"; 17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = ALBUM_KEY; 17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Video { 17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table. 17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = MediaColumns.DISPLAY_NAME; 17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 175500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final Cursor query(ContentResolver cr, Uri uri, String[] projection) { 17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cr.query(uri, projection, null, null, DEFAULT_SORT_ORDER); 17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface VideoColumns extends MediaColumns { 17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The duration of the video file, in ms 17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long)</P> 17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DURATION = "duration"; 17669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The artist who created the video file, if any 17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 17709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ARTIST = "artist"; 17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The album the video file is from, if any 17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALBUM = "album"; 17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The resolution of the video file, formatted as "XxY" 17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String RESOLUTION = "resolution"; 17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The description of the video recording 17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DESCRIPTION = "description"; 17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Whether the video should be published as public or private 17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String IS_PRIVATE = "isprivate"; 17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The user-added tags associated with a video 17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TAGS = "tags"; 18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The YouTube category of the video 18059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 18069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CATEGORY = "category"; 18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The language of the video 18119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LANGUAGE = "language"; 18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The latitude where the image was captured. 18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: DOUBLE</P> 18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LATITUDE = "latitude"; 18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The longitude where the image was captured. 18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: DOUBLE</P> 18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LONGITUDE = "longitude"; 18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The date & time that the image was taken in units 18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of milliseconds since jan 1, 1970. 18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE_TAKEN = "datetaken"; 18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The mini thumb id. 18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MINI_THUMB_MAGIC = "mini_thumb_magic"; 18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The bucket id of the video. This is a read-only property that 18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is automatically computed from the DATA column. 18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BUCKET_ID = "bucket_id"; 18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The bucket display name of the video. This is a read-only property that 18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is automatically computed from the DATA column. 18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BUCKET_DISPLAY_NAME = "bucket_display_name"; 18539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The bookmark for the video. Time in ms. Represents the location in the video that the 18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * video should start playing at the next time it is opened. If the value is null or 18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * out of the range 0..DURATION-1 then the video should start playing from the 18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * beginning. 18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BOOKMARK = "bookmark"; 18629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Media implements VideoColumns { 18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the content:// style URI for the video media table on the 18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given volume. 18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param volumeName the name of the volume to get the URI for 18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the URI to the video media table on the given volume 18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getContentUri(String volumeName) { 18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "/video/media"); 18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the internal storage. 18799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri INTERNAL_CONTENT_URI = 18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("internal"); 18829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URI for the "primary" external storage 18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume. 18869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri EXTERNAL_CONTENT_URI = 18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentUri("external"); 18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MIME type for this table. 18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CONTENT_TYPE = "vnd.android.cursor.dir/video"; 18949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 18979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DEFAULT_SORT_ORDER = TITLE; 18999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 190000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 190100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 190200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * This class allows developers to query and get two kinds of thumbnails: 190300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * MINI_KIND: 512 x 384 thumbnail 190400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * MICRO_KIND: 96 x 96 thumbnail 190500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * 190600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 190700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static class Thumbnails implements BaseColumns { 190800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 1909b994419263fb4f595379838f62efc50f90565e20Ray Chen * This method cancels the thumbnail request so clients waiting for getThumbnail will be 1910b994419263fb4f595379838f62efc50f90565e20Ray Chen * interrupted and return immediately. Only the original process which made the getThumbnail 1911b994419263fb4f595379838f62efc50f90565e20Ray Chen * requests can cancel their own requests. 1912b994419263fb4f595379838f62efc50f90565e20Ray Chen * 1913b994419263fb4f595379838f62efc50f90565e20Ray Chen * @param cr ContentResolver 1914b994419263fb4f595379838f62efc50f90565e20Ray Chen * @param origId original video id 1915b994419263fb4f595379838f62efc50f90565e20Ray Chen */ 1916b994419263fb4f595379838f62efc50f90565e20Ray Chen public static void cancelThumbnailRequest(ContentResolver cr, long origId) { 191713ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen InternalThumbnails.cancelThumbnailRequest(cr, origId, EXTERNAL_CONTENT_URI, 191813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen InternalThumbnails.DEFAULT_GROUP_ID); 191913ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen } 192013ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen 192113ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen /** 192213ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * This method checks if the thumbnails of the specified image (origId) has been created. 192313ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * It will be blocked until the thumbnails are generated. 192413ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * 192513ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param cr ContentResolver used to dispatch queries to MediaProvider. 192613ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param origId Original image id associated with thumbnail of interest. 192713ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param kind The type of thumbnail to fetch. Should be either MINI_KIND or MICRO_KIND. 192813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param options this is only used for MINI_KIND when decoding the Bitmap 192913ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @return A Bitmap instance. It could be null if the original image 193013ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * associated with origId doesn't exist or memory is not enough. 193113ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen */ 193213ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen public static Bitmap getThumbnail(ContentResolver cr, long origId, int kind, 193313ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen BitmapFactory.Options options) { 193413ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen return InternalThumbnails.getThumbnail(cr, origId, 193513ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen InternalThumbnails.DEFAULT_GROUP_ID, kind, options, 193613ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen EXTERNAL_CONTENT_URI, true); 1937b994419263fb4f595379838f62efc50f90565e20Ray Chen } 1938b994419263fb4f595379838f62efc50f90565e20Ray Chen 1939b994419263fb4f595379838f62efc50f90565e20Ray Chen /** 194000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * This method checks if the thumbnails of the specified image (origId) has been created. 194100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * It will be blocked until the thumbnails are generated. 194200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * 194300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param cr ContentResolver used to dispatch queries to MediaProvider. 194400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param origId Original image id associated with thumbnail of interest. 194513ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param groupId the id of group to which this request belongs 194600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param kind The type of thumbnail to fetch. Should be either MINI_KIND or MICRO_KIND 194700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param options this is only used for MINI_KIND when decoding the Bitmap 194800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @return A Bitmap instance. It could be null if the original image associated with 194900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * origId doesn't exist or memory is not enough. 195000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 195113ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen public static Bitmap getThumbnail(ContentResolver cr, long origId, long groupId, 195213ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen int kind, BitmapFactory.Options options) { 195313ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen return InternalThumbnails.getThumbnail(cr, origId, groupId, kind, options, 195400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen EXTERNAL_CONTENT_URI, true); 195500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 195600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 195700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 195813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * This method cancels the thumbnail request so clients waiting for getThumbnail will be 195913ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * interrupted and return immediately. Only the original process which made the getThumbnail 196013ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * requests can cancel their own requests. 196113ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * 196213ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param cr ContentResolver 196313ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param origId original video id 196413ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen * @param groupId the same groupId used in getThumbnail. 196513ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen */ 196613ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen public static void cancelThumbnailRequest(ContentResolver cr, long origId, long groupId) { 196713ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen InternalThumbnails.cancelThumbnailRequest(cr, origId, EXTERNAL_CONTENT_URI, groupId); 196813ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen } 196913ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen 197013ed5750ba515c3b4345937c7a11667a90cb1265Ray Chen /** 197100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * Get the content:// style URI for the image media table on the 197200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * given volume. 197300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * 197400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @param volumeName the name of the volume to get the URI for 197500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * @return the URI to the image media table on the given volume 197600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 197700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static Uri getContentUri(String volumeName) { 197800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + 197900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen "/video/thumbnails"); 198000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 198100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 198200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 198300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * The content:// style URI for the internal storage. 198400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 198500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final Uri INTERNAL_CONTENT_URI = 198600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen getContentUri("internal"); 198700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 198800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 198900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * The content:// style URI for the "primary" external storage 199000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * volume. 199100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 199200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final Uri EXTERNAL_CONTENT_URI = 199300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen getContentUri("external"); 199400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 199500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 199600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * The default sort order for this table 199700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 199800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final String DEFAULT_SORT_ORDER = "video_id ASC"; 199900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 200000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 200100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * The data stream for the thumbnail 200200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * <P>Type: DATA STREAM</P> 200300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 200400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final String DATA = "_data"; 200500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 200600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 200700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * The original image for the thumbnal 200800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * <P>Type: INTEGER (ID from Video table)</P> 200900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 201000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final String VIDEO_ID = "video_id"; 201100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 201200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 201300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * The kind of the thumbnail 201400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * <P>Type: INTEGER (One of the values below)</P> 201500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 201600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final String KIND = "kind"; 201700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 201800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final int MINI_KIND = 1; 201900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final int FULL_SCREEN_KIND = 2; 202000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final int MICRO_KIND = 3; 202100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 202200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 202300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * The width of the thumbnal 202400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * <P>Type: INTEGER (long)</P> 202500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 202600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final String WIDTH = "width"; 202700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen 202800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen /** 202900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * The height of the thumbnail 203000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen * <P>Type: INTEGER (long)</P> 203100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen */ 203200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public static final String HEIGHT = "height"; 203300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen } 20349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Uri for querying the state of the media scanner. 20389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Uri getMediaScannerUri() { 20409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Uri.parse(CONTENT_AUTHORITY_SLASH + "none/media_scanner"); 20419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Name of current volume being scanned by the media scanner. 20459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MEDIA_SCANNER_VOLUME = "volume"; 20478ce072d579e0c0e9329b5a3830155de8da7de4cfKarl Ostmo 20488ce072d579e0c0e9329b5a3830155de8da7de4cfKarl Ostmo /** 20498ce072d579e0c0e9329b5a3830155de8da7de4cfKarl Ostmo * Name of the file signaling the media scanner to ignore media in the containing directory 20508ce072d579e0c0e9329b5a3830155de8da7de4cfKarl Ostmo * and its subdirectories. Developers should use this to avoid application graphics showing 20518ce072d579e0c0e9329b5a3830155de8da7de4cfKarl Ostmo * up in the Gallery and likewise prevent application sounds and music from showing up in 20528ce072d579e0c0e9329b5a3830155de8da7de4cfKarl Ostmo * the Music app. 20538ce072d579e0c0e9329b5a3830155de8da7de4cfKarl Ostmo */ 20548ce072d579e0c0e9329b5a3830155de8da7de4cfKarl Ostmo public static final String MEDIA_IGNORE_FILENAME = ".nomedia"; 20553822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen 20563822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen /** 20573822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen * Get the media provider's version. 20583822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen * Applications that import data from the media provider into their own caches 20593822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen * can use this to detect that the media provider changed, and reimport data 20603822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen * as needed. No other assumptions should be made about the meaning of the version. 20613822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen * @param context Context to use for performing the query. 20623822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen * @return A version string, or null if the version could not be determined. 20633822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen */ 20643822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen public static String getVersion(Context context) { 20653822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen Cursor c = context.getContentResolver().query( 20663822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen Uri.parse(CONTENT_AUTHORITY_SLASH + "none/version"), 20673822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen null, null, null, null); 20683822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen if (c != null) { 20693822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen try { 20703822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen if (c.moveToFirst()) { 20713822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen return c.getString(0); 20723822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen } 20733822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen } finally { 20743822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen c.close(); 20753822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen } 20763822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen } 20773822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen return null; 20783822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen } 20793822f73a58af67ea7955f926c7d10335d86572c0Marco Nelissen 20809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2081