diff --git a/api/current.txt b/api/current.txt index 4f3733d759bac..72f8b99e30132 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 0c1aae8bd16c7..8904ee61e2e3e 100644 --- a/core/java/android/os/Environment.java +++ b/core/java/android/os/Environment.java @@ -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. *
@@ -671,6 +677,7 @@ public class Environment { *
Type: INTEGER (boolean)
+ */ + public static final String IS_AUDIOBOOK = "is_audiobook"; + /** * The genre of the audio file, if any *Type: TEXT
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 3a64f43f61de3..0950a24978663 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 {