| Index: base/android/java/src/org/chromium/base/ContentUriUtils.java
|
| diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base/android/java/src/org/chromium/base/ContentUriUtils.java
|
| index 9253f2850042c01fb3a831d7a03d9061d11f0cdf..2c0e791e695f768501f50abade0e1bd5a4d0a194 100644
|
| --- a/base/android/java/src/org/chromium/base/ContentUriUtils.java
|
| +++ b/base/android/java/src/org/chromium/base/ContentUriUtils.java
|
| @@ -38,10 +38,10 @@ public abstract class ContentUriUtils {
|
| public interface FileProviderUtil {
|
| /**
|
| * Generate a content URI from the given file.
|
| - * @param context Application context.
|
| + *
|
| * @param file The file to be translated.
|
| */
|
| - Uri getContentUriFromFile(Context context, File file);
|
| + Uri getContentUriFromFile(File file);
|
| }
|
|
|
| // Prevent instantiation.
|
| @@ -53,10 +53,10 @@ public abstract class ContentUriUtils {
|
| }
|
| }
|
|
|
| - public static Uri getContentUriFromFile(Context context, File file) {
|
| + public static Uri getContentUriFromFile(File file) {
|
| synchronized (sLock) {
|
| if (sFileProviderUtil != null) {
|
| - return sFileProviderUtil.getContentUriFromFile(context, file);
|
| + return sFileProviderUtil.getContentUriFromFile(file);
|
| }
|
| }
|
| return null;
|
| @@ -64,15 +64,14 @@ public abstract class ContentUriUtils {
|
|
|
| /**
|
| * Opens the content URI for reading, and returns the file descriptor to
|
| - * the caller. The caller is responsible for closing the file desciptor.
|
| + * the caller. The caller is responsible for closing the file descriptor.
|
| *
|
| - * @param context {@link Context} in interest
|
| * @param uriString the content URI to open
|
| - * @return file desciptor upon success, or -1 otherwise.
|
| + * @return file descriptor upon success, or -1 otherwise.
|
| */
|
| @CalledByNative
|
| - public static int openContentUriForRead(Context context, String uriString) {
|
| - AssetFileDescriptor afd = getAssetFileDescriptor(context, uriString);
|
| + public static int openContentUriForRead(String uriString) {
|
| + AssetFileDescriptor afd = getAssetFileDescriptor(uriString);
|
| if (afd != null) {
|
| return afd.getParcelFileDescriptor().detachFd();
|
| }
|
| @@ -82,15 +81,14 @@ public abstract class ContentUriUtils {
|
| /**
|
| * Check whether a content URI exists.
|
| *
|
| - * @param context {@link Context} in interest.
|
| * @param uriString the content URI to query.
|
| * @return true if the URI exists, or false otherwise.
|
| */
|
| @CalledByNative
|
| - public static boolean contentUriExists(Context context, String uriString) {
|
| + public static boolean contentUriExists(String uriString) {
|
| AssetFileDescriptor asf = null;
|
| try {
|
| - asf = getAssetFileDescriptor(context, uriString);
|
| + asf = getAssetFileDescriptor(uriString);
|
| return asf != null;
|
| } finally {
|
| // Do not use StreamUtil.closeQuietly here, as AssetFileDescriptor
|
| @@ -108,15 +106,14 @@ public abstract class ContentUriUtils {
|
| /**
|
| * Retrieve the MIME type for the content URI.
|
| *
|
| - * @param context {@link Context} in interest.
|
| * @param uriString the content URI to look up.
|
| * @return MIME type or null if the input params are empty or invalid.
|
| */
|
| @CalledByNative
|
| - public static String getMimeType(Context context, String uriString) {
|
| - ContentResolver resolver = context.getContentResolver();
|
| + public static String getMimeType(String uriString) {
|
| + ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver();
|
| Uri uri = Uri.parse(uriString);
|
| - if (isVirtualDocument(uri, context)) {
|
| + if (isVirtualDocument(uri)) {
|
| String[] streamTypes = resolver.getStreamTypes(uri, "*/*");
|
| return (streamTypes != null && streamTypes.length > 0) ? streamTypes[0] : null;
|
| }
|
| @@ -126,21 +123,20 @@ public abstract class ContentUriUtils {
|
| /**
|
| * Helper method to open a content URI and returns the ParcelFileDescriptor.
|
| *
|
| - * @param context {@link Context} in interest.
|
| * @param uriString the content URI to open.
|
| * @return AssetFileDescriptor of the content URI, or NULL if the file does not exist.
|
| */
|
| - private static AssetFileDescriptor getAssetFileDescriptor(Context context, String uriString) {
|
| - ContentResolver resolver = context.getContentResolver();
|
| + private static AssetFileDescriptor getAssetFileDescriptor(String uriString) {
|
| + ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver();
|
| Uri uri = Uri.parse(uriString);
|
|
|
| try {
|
| - if (isVirtualDocument(uri, context)) {
|
| + if (isVirtualDocument(uri)) {
|
| String[] streamTypes = resolver.getStreamTypes(uri, "*/*");
|
| if (streamTypes != null && streamTypes.length > 0) {
|
| AssetFileDescriptor afd =
|
| resolver.openTypedAssetFileDescriptor(uri, streamTypes[0], null);
|
| - if (afd.getStartOffset() != 0) {
|
| + if (afd != null && afd.getStartOffset() != 0) {
|
| // Do not use StreamUtil.closeQuietly here, as AssetFileDescriptor
|
| // does not implement Closeable until KitKat.
|
| try {
|
| @@ -162,9 +158,7 @@ public abstract class ContentUriUtils {
|
| Log.w(TAG, "Cannot find content uri: " + uriString, e);
|
| } catch (SecurityException e) {
|
| Log.w(TAG, "Cannot open content uri: " + uriString, e);
|
| - } catch (IllegalArgumentException e) {
|
| - Log.w(TAG, "Unknown content uri: " + uriString, e);
|
| - } catch (IllegalStateException e) {
|
| + } catch (IllegalArgumentException | IllegalStateException e) {
|
| Log.w(TAG, "Unknown content uri: " + uriString, e);
|
| }
|
|
|
| @@ -174,11 +168,11 @@ public abstract class ContentUriUtils {
|
| /**
|
| * Method to resolve the display name of a content URI.
|
| *
|
| - * @param uri the content URI to be resolved.
|
| - * @param context {@link Context} in interest.
|
| + * @param uri the content URI to be resolved.
|
| + * @param context {@link Context} in interest.
|
| * @param columnField the column field to query.
|
| * @return the display name of the @code uri if present in the database
|
| - * or an empty string otherwise.
|
| + * or an empty string otherwise.
|
| */
|
| public static String getDisplayName(Uri uri, Context context, String columnField) {
|
| if (uri == null) return "";
|
| @@ -224,14 +218,15 @@ public abstract class ContentUriUtils {
|
| * Checks whether the passed Uri represents a virtual document.
|
| *
|
| * @param uri the content URI to be resolved.
|
| - * @param contentResolver the content resolver to query.
|
| * @return True for virtual file, false for any other file.
|
| */
|
| - private static boolean isVirtualDocument(Uri uri, Context context) {
|
| + private static boolean isVirtualDocument(Uri uri) {
|
| if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return false;
|
| if (uri == null) return false;
|
| - if (!DocumentsContract.isDocumentUri(context, uri)) return false;
|
| - ContentResolver contentResolver = context.getContentResolver();
|
| + if (!DocumentsContract.isDocumentUri(ContextUtils.getApplicationContext(), uri)) {
|
| + return false;
|
| + }
|
| + ContentResolver contentResolver = ContextUtils.getApplicationContext().getContentResolver();
|
| Cursor cursor = null;
|
| try {
|
| cursor = contentResolver.query(uri, null, null, null, null);
|
| @@ -261,9 +256,7 @@ public abstract class ContentUriUtils {
|
| private static boolean hasVirtualFlag(Cursor cursor) {
|
| if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return false;
|
| int index = cursor.getColumnIndex(DocumentsContract.Document.COLUMN_FLAGS);
|
| - if (index > -1) {
|
| - return (cursor.getLong(index) & DocumentsContract.Document.FLAG_VIRTUAL_DOCUMENT) != 0;
|
| - }
|
| - return false;
|
| + return index > -1
|
| + && (cursor.getLong(index) & DocumentsContract.Document.FLAG_VIRTUAL_DOCUMENT) != 0;
|
| }
|
| }
|
|
|