From aec99bf78ff2404bf5497fdcb01430150709d8b3 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Thu, 7 Jan 2016 09:58:40 -0700 Subject: [PATCH] Internal components still need filename access. 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 | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index a9516d03ba0d0..ed4bb28427ae9 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -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");