diff options
-rw-r--r-- | api/current.txt | 2 | ||||
-rw-r--r-- | core/java/android/os/Environment.java | 12 | ||||
-rw-r--r-- | core/java/android/provider/MediaStore.java | 6 | ||||
-rw-r--r-- | media/java/android/media/MediaScanner.java | 16 |
4 files changed, 29 insertions, 7 deletions
diff --git a/api/current.txt b/api/current.txt index 4f3733d759ba..72f8b99e3013 100644 --- a/api/current.txt +++ b/api/current.txt @@ -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; @@ -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"; diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java index 0c1aae8bd16c..8904ee61e2e3 100644 --- a/core/java/android/os/Environment.java +++ b/core/java/android/os/Environment.java @@ -657,6 +657,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> * Each of its values have its own constant: @@ -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 */ @@ -684,7 +691,8 @@ public class Environment { DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, - DIRECTORY_DOCUMENTS + DIRECTORY_DOCUMENTS, + DIRECTORY_AUDIOBOOKS, }; /** @@ -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; @@ -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; } diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index ec8db1ca580e..9e26a368ad80 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -1693,6 +1693,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> * Does not exist in the database - only used by the media scanner for inserts. diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 3a64f43f61de..0950a2497866 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -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"; @@ -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); @@ -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) { @@ -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 @@ -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 { |