Fix url:file:// style URIs from not being detected in UriUtil.

Change-Id: I81c01202306d856f6f8f8b74a5a28d7c1011fcec
Tested: Was no longer able to repro b/222091734.
Bug: 222091734
(cherry picked from commit 2283165c23)
This commit is contained in:
Jake Klinker
2022-04-26 16:38:11 +00:00
parent 4c2aea615e
commit c8e4ab2b22
+28 -8
View File
@@ -49,6 +49,8 @@ public class UriUtil {
private static final String SCHEME_MMSTO = "smsto";
public static final HashSet<String> SMS_MMS_SCHEMES = new HashSet<String>(
Arrays.asList(SCHEME_SMS, SCHEME_MMS, SCHEME_SMSTO, SCHEME_MMSTO));
private static final String SCHEME_HTTP = "http";
private static final String SCHEME_HTTPS = "https";
public static final String SCHEME_BUGLE = "bugle";
public static final HashSet<String> SUPPORTED_SCHEME = new HashSet<String>(
@@ -98,8 +100,7 @@ public class UriUtil {
public static boolean isFileUri(final Uri uri) {
return uri != null &&
uri.getScheme() != null &&
TextUtils.equals(uri.getScheme().trim().toLowerCase(),
ContentResolver.SCHEME_FILE);
uri.getScheme().trim().toLowerCase().contains(ContentResolver.SCHEME_FILE);
}
/**
@@ -216,9 +217,10 @@ public class UriUtil {
inputStream = context.getContentResolver().openInputStream(sourceUri);
} else {
// The content is remote. Download it.
final URL url = new URL(sourceUri.toString());
final URLConnection ucon = url.openConnection();
inputStream = new BufferedInputStream(ucon.getInputStream());
inputStream = getInputStreamFromRemoteUri(sourceUri);
if (inputStream == null) {
return null;
}
}
return persistContentToScratchSpace(inputStream);
} catch (final Exception ex) {
@@ -235,6 +237,23 @@ public class UriUtil {
}
}
@DoesNotRunOnMainThread
private static InputStream getInputStreamFromRemoteUri(final Uri sourceUri)
throws IOException {
if (isRemoteUri(sourceUri)) {
final URL url = new URL(sourceUri.toString());
final URLConnection ucon = url.openConnection();
return new BufferedInputStream(ucon.getInputStream());
} else {
return null;
}
}
private static boolean isRemoteUri(final Uri sourceUri) {
return sourceUri.getScheme().equals(SCHEME_HTTP)
|| sourceUri.getScheme().equals(SCHEME_HTTPS);
}
/**
* Persist a piece of content from the given input stream, byte by byte to the specified
* directory.
@@ -273,9 +292,10 @@ public class UriUtil {
inputStream = context.getContentResolver().openInputStream(sourceUri);
} else {
// The content is remote. Download it.
final URL url = new URL(sourceUri.toString());
final URLConnection ucon = url.openConnection();
inputStream = new BufferedInputStream(ucon.getInputStream());
inputStream = getInputStreamFromRemoteUri(sourceUri);
if (inputStream == null) {
return null;
}
}
return persistContent(inputStream, outputDir, contentType);
} catch (final Exception ex) {