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

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Messaging/+/17957509

Change-Id: Ic40d53b31defa115d376069d7d873bac70c5d7c6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jake Klinker
2022-04-27 20:18:26 +00:00
committed by Automerger Merge Worker
+28 -8
View File
@@ -49,6 +49,8 @@ public class UriUtil {
private static final String SCHEME_MMSTO = "smsto"; private static final String SCHEME_MMSTO = "smsto";
public static final HashSet<String> SMS_MMS_SCHEMES = new HashSet<String>( public static final HashSet<String> SMS_MMS_SCHEMES = new HashSet<String>(
Arrays.asList(SCHEME_SMS, SCHEME_MMS, SCHEME_SMSTO, SCHEME_MMSTO)); 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 String SCHEME_BUGLE = "bugle";
public static final HashSet<String> SUPPORTED_SCHEME = new HashSet<String>( public static final HashSet<String> SUPPORTED_SCHEME = new HashSet<String>(
@@ -98,8 +100,7 @@ public class UriUtil {
public static boolean isFileUri(final Uri uri) { public static boolean isFileUri(final Uri uri) {
return uri != null && return uri != null &&
uri.getScheme() != null && uri.getScheme() != null &&
TextUtils.equals(uri.getScheme().trim().toLowerCase(), uri.getScheme().trim().toLowerCase().contains(ContentResolver.SCHEME_FILE);
ContentResolver.SCHEME_FILE);
} }
/** /**
@@ -216,9 +217,10 @@ public class UriUtil {
inputStream = context.getContentResolver().openInputStream(sourceUri); inputStream = context.getContentResolver().openInputStream(sourceUri);
} else { } else {
// The content is remote. Download it. // The content is remote. Download it.
final URL url = new URL(sourceUri.toString()); inputStream = getInputStreamFromRemoteUri(sourceUri);
final URLConnection ucon = url.openConnection(); if (inputStream == null) {
inputStream = new BufferedInputStream(ucon.getInputStream()); return null;
}
} }
return persistContentToScratchSpace(inputStream); return persistContentToScratchSpace(inputStream);
} catch (final Exception ex) { } 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 * Persist a piece of content from the given input stream, byte by byte to the specified
* directory. * directory.
@@ -273,9 +292,10 @@ public class UriUtil {
inputStream = context.getContentResolver().openInputStream(sourceUri); inputStream = context.getContentResolver().openInputStream(sourceUri);
} else { } else {
// The content is remote. Download it. // The content is remote. Download it.
final URL url = new URL(sourceUri.toString()); inputStream = getInputStreamFromRemoteUri(sourceUri);
final URLConnection ucon = url.openConnection(); if (inputStream == null) {
inputStream = new BufferedInputStream(ucon.getInputStream()); return null;
}
} }
return persistContent(inputStream, outputDir, contentType); return persistContent(inputStream, outputDir, contentType);
} catch (final Exception ex) { } catch (final Exception ex) {