Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10887d5e authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Add support for "Audiobooks".

Bug: 113356944
Test: manual
Change-Id: Ifed54c41a533ed2d556dc6561ea498ec293991a6
parent 9ba4a5ce
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -33452,6 +33452,7 @@ package android.os {
    method public static boolean isExternalStorageRemovable();
    method public static boolean isExternalStorageRemovable();
    method public static boolean isExternalStorageRemovable(java.io.File);
    method public static boolean isExternalStorageRemovable(java.io.File);
    field public static java.lang.String DIRECTORY_ALARMS;
    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_DCIM;
    field public static java.lang.String DIRECTORY_DOCUMENTS;
    field public static java.lang.String DIRECTORY_DOCUMENTS;
    field public static java.lang.String DIRECTORY_DOWNLOADS;
    field public static java.lang.String DIRECTORY_DOWNLOADS;
@@ -37308,6 +37309,7 @@ package android.provider {
    field public static final java.lang.String COMPOSER = "composer";
    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 DURATION = "duration";
    field public static final java.lang.String IS_ALARM = "is_alarm";
    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_MUSIC = "is_music";
    field public static final java.lang.String IS_NOTIFICATION = "is_notification";
    field public static final java.lang.String IS_NOTIFICATION = "is_notification";
    field public static final java.lang.String IS_PODCAST = "is_podcast";
    field public static final java.lang.String IS_PODCAST = "is_podcast";
+11 −1
Original line number Original line Diff line number Diff line
@@ -656,6 +656,12 @@ public class Environment {
     */
     */
    public static String DIRECTORY_SCREENSHOTS = "Screenshots";
    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.
     * List of standard storage directories.
     * <p>
     * <p>
@@ -671,6 +677,7 @@ public class Environment {
     *   <li>{@link #DIRECTORY_DOWNLOADS}
     *   <li>{@link #DIRECTORY_DOWNLOADS}
     *   <li>{@link #DIRECTORY_DCIM}
     *   <li>{@link #DIRECTORY_DCIM}
     *   <li>{@link #DIRECTORY_DOCUMENTS}
     *   <li>{@link #DIRECTORY_DOCUMENTS}
     *   <li>{@link #DIRECTORY_AUDIOBOOKS}
     * </ul>
     * </ul>
     * @hide
     * @hide
     */
     */
@@ -684,7 +691,8 @@ public class Environment {
            DIRECTORY_MOVIES,
            DIRECTORY_MOVIES,
            DIRECTORY_DOWNLOADS,
            DIRECTORY_DOWNLOADS,
            DIRECTORY_DCIM,
            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_DOWNLOADS = 1 << 7;
    /** {@hide} */ public static final int HAS_DCIM = 1 << 8;
    /** {@hide} */ public static final int HAS_DCIM = 1 << 8;
    /** {@hide} */ public static final int HAS_DOCUMENTS = 1 << 9;
    /** {@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_ANDROID = 1 << 16;
    /** {@hide} */ public static final int HAS_OTHER = 1 << 17;
    /** {@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_DOWNLOADS.equals(name)) res |= HAS_DOWNLOADS;
                else if (DIRECTORY_DCIM.equals(name)) res |= HAS_DCIM;
                else if (DIRECTORY_DCIM.equals(name)) res |= HAS_DCIM;
                else if (DIRECTORY_DOCUMENTS.equals(name)) res |= HAS_DOCUMENTS;
                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 if (DIRECTORY_ANDROID.equals(name)) res |= HAS_ANDROID;
                else res |= HAS_OTHER;
                else res |= HAS_OTHER;
            }
            }
+6 −0
Original line number Original line Diff line number Diff line
@@ -1564,6 +1564,12 @@ public final class MediaStore {
             */
             */
            public static final String IS_NOTIFICATION = "is_notification";
            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
             * The genre of the audio file, if any
             * <P>Type: TEXT</P>
             * <P>Type: TEXT</P>
+10 −6
Original line number Original line Diff line number Diff line
@@ -156,7 +156,8 @@ public class MediaScanner implements AutoCloseable {
    private static final String NOTIFICATIONS_DIR = "/notifications/";
    private static final String NOTIFICATIONS_DIR = "/notifications/";
    private static final String ALARMS_DIR = "/alarms/";
    private static final String ALARMS_DIR = "/alarms/";
    private static final String MUSIC_DIR = "/music/";
    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 SCANNED_BUILD_PREFS_NAME = "MediaScanBuild";
    public static final String LAST_INTERNAL_SCAN_FINGERPRINT = "lastScanFingerprint";
    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
                // rescan for metadata if file was modified since last scan
                if (entry != null && (entry.mLastModifiedChanged || scanAlways)) {
                if (entry != null && (entry.mLastModifiedChanged || scanAlways)) {
                    if (noMedia) {
                    if (noMedia) {
                        result = endFile(entry, false, false, false, false, false);
                        result = endFile(entry, false, false, false, false, false, false);
                    } else {
                    } else {
                        boolean isaudio = MediaFile.isAudioMimeType(mMimeType);
                        boolean isaudio = MediaFile.isAudioMimeType(mMimeType);
                        boolean isvideo = MediaFile.isVideoMimeType(mMimeType);
                        boolean isvideo = MediaFile.isVideoMimeType(mMimeType);
@@ -679,11 +680,13 @@ public class MediaScanner implements AutoCloseable {
                        boolean notifications = mScanSuccess &&
                        boolean notifications = mScanSuccess &&
                                (lowpath.indexOf(NOTIFICATIONS_DIR) > 0);
                                (lowpath.indexOf(NOTIFICATIONS_DIR) > 0);
                        boolean alarms = mScanSuccess && (lowpath.indexOf(ALARMS_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) ||
                        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) {
            } catch (RemoteException e) {
@@ -957,7 +960,7 @@ public class MediaScanner implements AutoCloseable {


        @UnsupportedAppUsage
        @UnsupportedAppUsage
        private Uri endFile(FileEntry entry, boolean ringtones, boolean notifications,
        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 {
                throws RemoteException {
            // update database
            // update database


@@ -1003,6 +1006,7 @@ public class MediaScanner implements AutoCloseable {
                values.put(Audio.Media.IS_ALARM, alarms);
                values.put(Audio.Media.IS_ALARM, alarms);
                values.put(Audio.Media.IS_MUSIC, music);
                values.put(Audio.Media.IS_MUSIC, music);
                values.put(Audio.Media.IS_PODCAST, podcasts);
                values.put(Audio.Media.IS_PODCAST, podcasts);
                values.put(Audio.Media.IS_AUDIOBOOK, audiobooks);
            } else if (MediaFile.isExifMimeType(mMimeType) && !mNoMedia) {
            } else if (MediaFile.isExifMimeType(mMimeType) && !mNoMedia) {
                ExifInterface exif = null;
                ExifInterface exif = null;
                try {
                try {