1package com.bumptech.glide.load.model; 2 3import android.content.ContentResolver; 4import android.content.Context; 5import android.net.Uri; 6import com.bumptech.glide.load.data.DataFetcher; 7 8public abstract class UriLoader<T> implements ModelLoader<Uri, T>{ 9 private final Context context; 10 private final ModelLoader<GlideUrl, T> urlLoader; 11 12 public UriLoader(Context context, ModelLoader<GlideUrl, T> urlLoader) { 13 this.context = context; 14 this.urlLoader = urlLoader; 15 } 16 17 @Override 18 public final DataFetcher<T> getResourceFetcher(Uri model, int width, int height) { 19 final String scheme = model.getScheme(); 20 21 DataFetcher<T> result = null; 22 if (isLocalUri(scheme)) { 23 result = getLocalUriFetcher(context, model); 24 } else if (urlLoader != null && ("http".equals(scheme) || "https".equals(scheme))) { 25 result = urlLoader.getResourceFetcher(new GlideUrl(model.toString()), width, height); 26 } 27 28 return result; 29 } 30 31 protected abstract DataFetcher<T> getLocalUriFetcher(Context context, Uri uri); 32 33 private boolean isLocalUri(String scheme) { 34 return ContentResolver.SCHEME_FILE.equals(scheme) 35 || ContentResolver.SCHEME_CONTENT.equals(scheme) 36 || ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme); 37 } 38} 39