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

Commit a9e87c9c authored by Steve Howard's avatar Steve Howard
Browse files

New error status for "destination file already exists".

Also changing the behavior of the local URI column slightly to better
match the spec -- it should return the client-provided destination so
that it's valid even if the download failed.

Change-Id: Ibf9c07519e647e677ebac8b334b9f2e930e47033
parent 8544560c
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -96356,6 +96356,17 @@
 visibility="public"
>
</field>
<field name="ERROR_FILE_ALREADY_EXISTS"
 type="int"
 transient="false"
 volatile="false"
 value="1009"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="ERROR_FILE_ERROR"
 type="int"
 transient="false"
+13 −9
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.os.ParcelFileDescriptor;
import android.provider.BaseColumns;
import android.provider.Downloads;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -194,6 +193,12 @@ public class DownloadManager {
     */
    public final static int ERROR_CANNOT_RESUME = 1008;

    /**
     * Value of {@link #COLUMN_ERROR_CODE} when the requested destination file already exists (the
     * download manager will not overwrite an existing file).
     */
    public final static int ERROR_FILE_ALREADY_EXISTS = 1009;

    /**
     * Broadcast intent action sent by the download manager when a download completes.
     */
@@ -235,10 +240,11 @@ public class DownloadManager {
        Downloads.COLUMN_URI,
        Downloads.COLUMN_MIME_TYPE,
        Downloads.COLUMN_TOTAL_BYTES,
        Downloads._DATA,
        Downloads.COLUMN_STATUS,
        Downloads.COLUMN_CURRENT_BYTES,
        Downloads.COLUMN_LAST_MODIFICATION,
        Downloads.COLUMN_DESTINATION,
        Downloads.Impl.COLUMN_FILE_NAME_HINT,
    };

    private static final Set<String> LONG_COLUMNS = new HashSet<String>(
@@ -820,15 +826,10 @@ public class DownloadManager {
        }

        private String getLocalUri() {
            String localUri = getUnderlyingString(Downloads.Impl._DATA);
            if (localUri == null) {
                return null;
            }

            long destinationType = getUnderlyingLong(Downloads.Impl.COLUMN_DESTINATION);
            if (destinationType == Downloads.Impl.DESTINATION_FILE_URI) {
                // return file URI for external download
                return Uri.fromFile(new File(localUri)).toString();
                // return client-provided file URI for external download
                return getUnderlyingString(Downloads.Impl.COLUMN_FILE_NAME_HINT);
            }

            // return content URI for cache download
@@ -894,6 +895,9 @@ public class DownloadManager {
                case Downloads.Impl.STATUS_CANNOT_RESUME:
                    return ERROR_CANNOT_RESUME;

                case Downloads.Impl.STATUS_FILE_ALREADY_EXISTS_ERROR:
                    return ERROR_FILE_ALREADY_EXISTS;

                default:
                    return ERROR_UNKNOWN;
            }
+6 −1
Original line number Diff line number Diff line
@@ -1077,7 +1077,12 @@ public final class Downloads {
        /**
         * The lowest-valued error status that is not an actual HTTP status code.
         */
        public static final int MIN_ARTIFICIAL_ERROR_STATUS = 489;
        public static final int MIN_ARTIFICIAL_ERROR_STATUS = 488;

        /**
         * The requested destination file already exists.
         */
        public static final int STATUS_FILE_ALREADY_EXISTS_ERROR = 488;

        /**
         * Some possibly transient error occurred, but we can't resume the download.