aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Klinker <jklinker@google.com>2022-04-21 16:46:18 +0000
committerJake Klinker <jklinker@google.com>2022-04-26 16:38:11 +0000
commitc8e4ab2b22cf6551c6c464df7f261ed4d3b659a6 (patch)
tree578d7efd681f5c1f080cc31bc9919f37f2e11de6
parent4c2aea615e3ce0137e2c18d505c6d38a0588bcbc (diff)
downloadMessaging-android13-frc-odp-release.tar.gz
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.java36
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) {