OSDN Git Service

Internal components still need filename access.
authorJeff Sharkey <jsharkey@android.com>
Thu, 7 Jan 2016 16:58:40 +0000 (09:58 -0700)
committerJeff Sharkey <jsharkey@android.com>
Thu, 7 Jan 2016 16:58:43 +0000 (09:58 -0700)
Give them a way to force-enable filename access, bypassing the
recently added deprecated check.

Bug: 26438975
Change-Id: Ifd1e3debf7c7b3113907a5f2815c29ddb7db581f

core/java/android/app/DownloadManager.java

index a9516d0..ed4bb28 100644 (file)
@@ -920,9 +920,9 @@ public class DownloadManager {
 
     private final ContentResolver mResolver;
     private final String mPackageName;
-    private final int mTargetSdkVersion;
 
     private Uri mBaseUri = Downloads.Impl.CONTENT_URI;
+    private boolean mAccessFilename;
 
     /**
      * @hide
@@ -930,7 +930,10 @@ public class DownloadManager {
     public DownloadManager(Context context) {
         mResolver = context.getContentResolver();
         mPackageName = context.getPackageName();
-        mTargetSdkVersion = context.getApplicationInfo().targetSdkVersion;
+
+        // Callers can access filename columns when targeting old platform
+        // versions; otherwise we throw telling them it's deprecated.
+        mAccessFilename = context.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.N;
     }
 
     /**
@@ -946,6 +949,11 @@ public class DownloadManager {
         }
     }
 
+    /** {@hide} */
+    public void setAccessFilename(boolean accessFilename) {
+        mAccessFilename = accessFilename;
+    }
+
     /**
      * Enqueue a new download.  The download will start automatically once the download manager is
      * ready to execute it and connectivity is available.
@@ -1010,7 +1018,7 @@ public class DownloadManager {
         if (underlyingCursor == null) {
             return null;
         }
-        return new CursorTranslator(underlyingCursor, mBaseUri, mTargetSdkVersion);
+        return new CursorTranslator(underlyingCursor, mBaseUri, mAccessFilename);
     }
 
     /**
@@ -1279,12 +1287,12 @@ public class DownloadManager {
      */
     private static class CursorTranslator extends CursorWrapper {
         private final Uri mBaseUri;
-        private final int mTargetSdkVersion;
+        private final boolean mAccessFilename;
 
-        public CursorTranslator(Cursor cursor, Uri baseUri, int targetSdkVersion) {
+        public CursorTranslator(Cursor cursor, Uri baseUri, boolean accessFilename) {
             super(cursor);
             mBaseUri = baseUri;
-            mTargetSdkVersion = targetSdkVersion;
+            mAccessFilename = accessFilename;
         }
 
         @Override
@@ -1310,7 +1318,7 @@ public class DownloadManager {
                 case COLUMN_LOCAL_URI:
                     return getLocalUri();
                 case COLUMN_LOCAL_FILENAME:
-                    if (mTargetSdkVersion >= Build.VERSION_CODES.N) {
+                    if (!mAccessFilename) {
                         throw new IllegalArgumentException(
                                 "COLUMN_LOCAL_FILENAME is deprecated;"
                                         + " use ContentResolver.openFileDescriptor() instead");