Loading api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -33538,6 +33538,7 @@ package android.os { method public static boolean isExternalStorageRemovable(); method public static boolean isExternalStorageRemovable(java.io.File); field public static java.lang.String DIRECTORY_ALARMS; field public static java.lang.String DIRECTORY_AUDIOBOOKS; field public static java.lang.String DIRECTORY_DCIM; field public static java.lang.String DIRECTORY_DOCUMENTS; field public static java.lang.String DIRECTORY_DOWNLOADS; Loading Loading @@ -37395,6 +37396,7 @@ package android.provider { field public static final java.lang.String COMPOSER = "composer"; field public static final java.lang.String DURATION = "duration"; field public static final java.lang.String IS_ALARM = "is_alarm"; field public static final java.lang.String IS_AUDIOBOOK = "is_audiobook"; field public static final java.lang.String IS_MUSIC = "is_music"; field public static final java.lang.String IS_NOTIFICATION = "is_notification"; field public static final java.lang.String IS_PODCAST = "is_podcast"; core/java/android/os/Environment.java +11 −1 Original line number Diff line number Diff line Loading @@ -656,6 +656,12 @@ public class Environment { */ public static String DIRECTORY_SCREENSHOTS = "Screenshots"; /** * Standard directory in which to place any audio files which are * audiobooks. */ public static String DIRECTORY_AUDIOBOOKS = "Audiobooks"; /** * List of standard storage directories. * <p> Loading @@ -671,6 +677,7 @@ public class Environment { * <li>{@link #DIRECTORY_DOWNLOADS} * <li>{@link #DIRECTORY_DCIM} * <li>{@link #DIRECTORY_DOCUMENTS} * <li>{@link #DIRECTORY_AUDIOBOOKS} * </ul> * @hide */ Loading @@ -684,7 +691,8 @@ public class Environment { DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, DIRECTORY_DOCUMENTS DIRECTORY_DOCUMENTS, DIRECTORY_AUDIOBOOKS, }; /** Loading @@ -709,6 +717,7 @@ public class Environment { /** {@hide} */ public static final int HAS_DOWNLOADS = 1 << 7; /** {@hide} */ public static final int HAS_DCIM = 1 << 8; /** {@hide} */ public static final int HAS_DOCUMENTS = 1 << 9; /** {@hide} */ public static final int HAS_AUDIOBOOKS = 1 << 10; /** {@hide} */ public static final int HAS_ANDROID = 1 << 16; /** {@hide} */ public static final int HAS_OTHER = 1 << 17; Loading Loading @@ -738,6 +747,7 @@ public class Environment { else if (DIRECTORY_DOWNLOADS.equals(name)) res |= HAS_DOWNLOADS; else if (DIRECTORY_DCIM.equals(name)) res |= HAS_DCIM; else if (DIRECTORY_DOCUMENTS.equals(name)) res |= HAS_DOCUMENTS; else if (DIRECTORY_AUDIOBOOKS.equals(name)) res |= HAS_AUDIOBOOKS; else if (DIRECTORY_ANDROID.equals(name)) res |= HAS_ANDROID; else res |= HAS_OTHER; } Loading core/java/android/provider/MediaStore.java +6 −0 Original line number Diff line number Diff line Loading @@ -1692,6 +1692,12 @@ public final class MediaStore { */ public static final String IS_NOTIFICATION = "is_notification"; /** * Non-zero if the audio file is an audiobook * <P>Type: INTEGER (boolean)</P> */ public static final String IS_AUDIOBOOK = "is_audiobook"; /** * The genre of the audio file, if any * <P>Type: TEXT</P> Loading media/java/android/media/MediaScanner.java +10 −6 Original line number Diff line number Diff line Loading @@ -156,7 +156,8 @@ public class MediaScanner implements AutoCloseable { private static final String NOTIFICATIONS_DIR = "/notifications/"; private static final String ALARMS_DIR = "/alarms/"; private static final String MUSIC_DIR = "/music/"; private static final String PODCAST_DIR = "/podcasts/"; private static final String PODCASTS_DIR = "/podcasts/"; private static final String AUDIOBOOKS_DIR = "/audiobooks/"; public static final String SCANNED_BUILD_PREFS_NAME = "MediaScanBuild"; public static final String LAST_INTERNAL_SCAN_FINGERPRINT = "lastScanFingerprint"; Loading Loading @@ -654,7 +655,7 @@ public class MediaScanner implements AutoCloseable { // rescan for metadata if file was modified since last scan if (entry != null && (entry.mLastModifiedChanged || scanAlways)) { if (noMedia) { result = endFile(entry, false, false, false, false, false); result = endFile(entry, false, false, false, false, false, false); } else { boolean isaudio = MediaFile.isAudioMimeType(mMimeType); boolean isvideo = MediaFile.isVideoMimeType(mMimeType); Loading @@ -679,11 +680,13 @@ public class MediaScanner implements AutoCloseable { boolean notifications = mScanSuccess && (lowpath.indexOf(NOTIFICATIONS_DIR) > 0); boolean alarms = mScanSuccess && (lowpath.indexOf(ALARMS_DIR) > 0); boolean podcasts = mScanSuccess && (lowpath.indexOf(PODCAST_DIR) > 0); boolean podcasts = mScanSuccess && (lowpath.indexOf(PODCASTS_DIR) > 0); boolean audiobooks = mScanSuccess && (lowpath.indexOf(AUDIOBOOKS_DIR) > 0); boolean music = mScanSuccess && ((lowpath.indexOf(MUSIC_DIR) > 0) || (!ringtones && !notifications && !alarms && !podcasts)); (!ringtones && !notifications && !alarms && !podcasts && !audiobooks)); result = endFile(entry, ringtones, notifications, alarms, music, podcasts); result = endFile(entry, ringtones, notifications, alarms, podcasts, audiobooks, music); } } } catch (RemoteException e) { Loading Loading @@ -957,7 +960,7 @@ public class MediaScanner implements AutoCloseable { @UnsupportedAppUsage private Uri endFile(FileEntry entry, boolean ringtones, boolean notifications, boolean alarms, boolean music, boolean podcasts) boolean alarms, boolean podcasts, boolean audiobooks, boolean music) throws RemoteException { // update database Loading Loading @@ -1003,6 +1006,7 @@ public class MediaScanner implements AutoCloseable { values.put(Audio.Media.IS_ALARM, alarms); values.put(Audio.Media.IS_MUSIC, music); values.put(Audio.Media.IS_PODCAST, podcasts); values.put(Audio.Media.IS_AUDIOBOOK, audiobooks); } else if (MediaFile.isExifMimeType(mMimeType) && !mNoMedia) { ExifInterface exif = null; try { Loading Loading
api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -33538,6 +33538,7 @@ package android.os { method public static boolean isExternalStorageRemovable(); method public static boolean isExternalStorageRemovable(java.io.File); field public static java.lang.String DIRECTORY_ALARMS; field public static java.lang.String DIRECTORY_AUDIOBOOKS; field public static java.lang.String DIRECTORY_DCIM; field public static java.lang.String DIRECTORY_DOCUMENTS; field public static java.lang.String DIRECTORY_DOWNLOADS; Loading Loading @@ -37395,6 +37396,7 @@ package android.provider { field public static final java.lang.String COMPOSER = "composer"; field public static final java.lang.String DURATION = "duration"; field public static final java.lang.String IS_ALARM = "is_alarm"; field public static final java.lang.String IS_AUDIOBOOK = "is_audiobook"; field public static final java.lang.String IS_MUSIC = "is_music"; field public static final java.lang.String IS_NOTIFICATION = "is_notification"; field public static final java.lang.String IS_PODCAST = "is_podcast";
core/java/android/os/Environment.java +11 −1 Original line number Diff line number Diff line Loading @@ -656,6 +656,12 @@ public class Environment { */ public static String DIRECTORY_SCREENSHOTS = "Screenshots"; /** * Standard directory in which to place any audio files which are * audiobooks. */ public static String DIRECTORY_AUDIOBOOKS = "Audiobooks"; /** * List of standard storage directories. * <p> Loading @@ -671,6 +677,7 @@ public class Environment { * <li>{@link #DIRECTORY_DOWNLOADS} * <li>{@link #DIRECTORY_DCIM} * <li>{@link #DIRECTORY_DOCUMENTS} * <li>{@link #DIRECTORY_AUDIOBOOKS} * </ul> * @hide */ Loading @@ -684,7 +691,8 @@ public class Environment { DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, DIRECTORY_DOCUMENTS DIRECTORY_DOCUMENTS, DIRECTORY_AUDIOBOOKS, }; /** Loading @@ -709,6 +717,7 @@ public class Environment { /** {@hide} */ public static final int HAS_DOWNLOADS = 1 << 7; /** {@hide} */ public static final int HAS_DCIM = 1 << 8; /** {@hide} */ public static final int HAS_DOCUMENTS = 1 << 9; /** {@hide} */ public static final int HAS_AUDIOBOOKS = 1 << 10; /** {@hide} */ public static final int HAS_ANDROID = 1 << 16; /** {@hide} */ public static final int HAS_OTHER = 1 << 17; Loading Loading @@ -738,6 +747,7 @@ public class Environment { else if (DIRECTORY_DOWNLOADS.equals(name)) res |= HAS_DOWNLOADS; else if (DIRECTORY_DCIM.equals(name)) res |= HAS_DCIM; else if (DIRECTORY_DOCUMENTS.equals(name)) res |= HAS_DOCUMENTS; else if (DIRECTORY_AUDIOBOOKS.equals(name)) res |= HAS_AUDIOBOOKS; else if (DIRECTORY_ANDROID.equals(name)) res |= HAS_ANDROID; else res |= HAS_OTHER; } Loading
core/java/android/provider/MediaStore.java +6 −0 Original line number Diff line number Diff line Loading @@ -1692,6 +1692,12 @@ public final class MediaStore { */ public static final String IS_NOTIFICATION = "is_notification"; /** * Non-zero if the audio file is an audiobook * <P>Type: INTEGER (boolean)</P> */ public static final String IS_AUDIOBOOK = "is_audiobook"; /** * The genre of the audio file, if any * <P>Type: TEXT</P> Loading
media/java/android/media/MediaScanner.java +10 −6 Original line number Diff line number Diff line Loading @@ -156,7 +156,8 @@ public class MediaScanner implements AutoCloseable { private static final String NOTIFICATIONS_DIR = "/notifications/"; private static final String ALARMS_DIR = "/alarms/"; private static final String MUSIC_DIR = "/music/"; private static final String PODCAST_DIR = "/podcasts/"; private static final String PODCASTS_DIR = "/podcasts/"; private static final String AUDIOBOOKS_DIR = "/audiobooks/"; public static final String SCANNED_BUILD_PREFS_NAME = "MediaScanBuild"; public static final String LAST_INTERNAL_SCAN_FINGERPRINT = "lastScanFingerprint"; Loading Loading @@ -654,7 +655,7 @@ public class MediaScanner implements AutoCloseable { // rescan for metadata if file was modified since last scan if (entry != null && (entry.mLastModifiedChanged || scanAlways)) { if (noMedia) { result = endFile(entry, false, false, false, false, false); result = endFile(entry, false, false, false, false, false, false); } else { boolean isaudio = MediaFile.isAudioMimeType(mMimeType); boolean isvideo = MediaFile.isVideoMimeType(mMimeType); Loading @@ -679,11 +680,13 @@ public class MediaScanner implements AutoCloseable { boolean notifications = mScanSuccess && (lowpath.indexOf(NOTIFICATIONS_DIR) > 0); boolean alarms = mScanSuccess && (lowpath.indexOf(ALARMS_DIR) > 0); boolean podcasts = mScanSuccess && (lowpath.indexOf(PODCAST_DIR) > 0); boolean podcasts = mScanSuccess && (lowpath.indexOf(PODCASTS_DIR) > 0); boolean audiobooks = mScanSuccess && (lowpath.indexOf(AUDIOBOOKS_DIR) > 0); boolean music = mScanSuccess && ((lowpath.indexOf(MUSIC_DIR) > 0) || (!ringtones && !notifications && !alarms && !podcasts)); (!ringtones && !notifications && !alarms && !podcasts && !audiobooks)); result = endFile(entry, ringtones, notifications, alarms, music, podcasts); result = endFile(entry, ringtones, notifications, alarms, podcasts, audiobooks, music); } } } catch (RemoteException e) { Loading Loading @@ -957,7 +960,7 @@ public class MediaScanner implements AutoCloseable { @UnsupportedAppUsage private Uri endFile(FileEntry entry, boolean ringtones, boolean notifications, boolean alarms, boolean music, boolean podcasts) boolean alarms, boolean podcasts, boolean audiobooks, boolean music) throws RemoteException { // update database Loading Loading @@ -1003,6 +1006,7 @@ public class MediaScanner implements AutoCloseable { values.put(Audio.Media.IS_ALARM, alarms); values.put(Audio.Media.IS_MUSIC, music); values.put(Audio.Media.IS_PODCAST, podcasts); values.put(Audio.Media.IS_AUDIOBOOK, audiobooks); } else if (MediaFile.isExifMimeType(mMimeType) && !mNoMedia) { ExifInterface exif = null; try { Loading