Merge "Add support for "Audiobooks"."
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user