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
This commit is contained in:
Jeff Sharkey
2016-01-07 09:58:40 -07:00
parent 8b0db0401e
commit aec99bf78f

View 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");