From f9f9d2ba98eabe692df0a893b497993681fe24b0 Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Sun, 28 Sep 2014 15:45:15 -0700 Subject: [PATCH] Assume string starting with '/' are file paths. Fixes #161. --- .../load/model/stream/StringLoaderTest.java | 12 ++++++++++++ .../glide/load/model/StringLoader.java | 19 ++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/library/src/androidTest/java/com/bumptech/glide/load/model/stream/StringLoaderTest.java b/library/src/androidTest/java/com/bumptech/glide/load/model/stream/StringLoaderTest.java index e644563b45..f47b7526db 100644 --- a/library/src/androidTest/java/com/bumptech/glide/load/model/stream/StringLoaderTest.java +++ b/library/src/androidTest/java/com/bumptech/glide/load/model/stream/StringLoaderTest.java @@ -30,6 +30,7 @@ public class StringLoaderTest { private StreamStringLoader stringLoader; private ModelLoader uriLoader; + @SuppressWarnings("unchecked") @Before public void setUp() throws Exception { uriLoader = mock(ModelLoader.class); @@ -46,6 +47,17 @@ public void testHandlesPaths() throws IOException { verify(uriLoader).getResourceFetcher(eq(Uri.fromFile(f)), eq(IMAGE_SIDE), eq(IMAGE_SIDE)); } + @Test + public void testCanHandleComplexFilePaths() { + assumeTrue(!Util.isWindows()); + String testPath = "/storage/emulated/0/DCIM/Camera/IMG_20140520_100001:nopm:.jpg,mimeType=image/jpeg," + + "2448x3264,orientation=0,date=Tue"; + stringLoader.getResourceFetcher(testPath, IMAGE_SIDE, IMAGE_SIDE); + + Uri expected = Uri.fromFile(new File(testPath)); + verify(uriLoader).getResourceFetcher(eq(expected), eq(IMAGE_SIDE), eq(IMAGE_SIDE)); + } + @Test public void testHandlesFileUris() throws IOException { File f = Robolectric.application.getCacheDir(); diff --git a/library/src/main/java/com/bumptech/glide/load/model/StringLoader.java b/library/src/main/java/com/bumptech/glide/load/model/StringLoader.java index faea985571..a8e793fc55 100644 --- a/library/src/main/java/com/bumptech/glide/load/model/StringLoader.java +++ b/library/src/main/java/com/bumptech/glide/load/model/StringLoader.java @@ -20,12 +20,21 @@ public StringLoader(ModelLoader uriLoader) { @Override public DataFetcher getResourceFetcher(String model, int width, int height) { - Uri uri = Uri.parse(model); - - final String scheme = uri.getScheme(); - if (scheme == null) { - uri = Uri.fromFile(new File(model)); + Uri uri; + if (model.startsWith("/")) { + uri = toFileUri(model); + } else { + uri = Uri.parse(model); + final String scheme = uri.getScheme(); + if (scheme == null) { + uri = toFileUri(model); + } } + return uriLoader.getResourceFetcher(uri, width, height); } + + private static Uri toFileUri(String path) { + return Uri.fromFile(new File(path)); + } }