diff options
author | Jake Klinker <jklinker@google.com> | 2022-04-21 16:46:18 +0000 |
---|---|---|
committer | Jake Klinker <jklinker@google.com> | 2022-04-26 16:38:11 +0000 |
commit | c8e4ab2b22cf6551c6c464df7f261ed4d3b659a6 (patch) | |
tree | 578d7efd681f5c1f080cc31bc9919f37f2e11de6 | |
parent | 4c2aea615e3ce0137e2c18d505c6d38a0588bcbc (diff) | |
download | Messaging-android13-frc-odp-release.tar.gz |
Fix url:file:// style URIs from not being detected in UriUtil.t_frc_odp_330442040t_frc_odp_330442000t_frc_ase_330444010android13-frc-odp-releaseandroid13-dev
Change-Id: I81c01202306d856f6f8f8b74a5a28d7c1011fcec
Tested: Was no longer able to repro b/222091734.
Bug: 222091734
(cherry picked from commit 2283165c23b9162e99b817400889fe541799626f)
-rw-r--r-- | src/com/android/messaging/util/UriUtil.java | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/src/com/android/messaging/util/UriUtil.java b/src/com/android/messaging/util/UriUtil.java index 6e39749..f92155f 100644 --- a/src/com/android/messaging/util/UriUtil.java +++ b/src/com/android/messaging/util/UriUtil.java @@ -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) { |