package com.bumptech.glide.load.model; import android.content.ContentResolver; import android.content.Context; import android.net.Uri; import com.bumptech.glide.load.data.DataFetcher; public abstract class UriLoader<T> implements ModelLoader<Uri, T>{ private final Context context; private final ModelLoader<GlideUrl, T> urlLoader; public UriLoader(Context context, ModelLoader<GlideUrl, T> urlLoader) { this.context = context; this.urlLoader = urlLoader; } @Override public final DataFetcher<T> getResourceFetcher(Uri model, int width, int height) { final String scheme = model.getScheme(); DataFetcher<T> result = null; if (isLocalUri(scheme)) { result = getLocalUriFetcher(context, model); } else if (urlLoader != null && ("http".equals(scheme) || "https".equals(scheme))) { result = urlLoader.getResourceFetcher(new GlideUrl(model.toString()), width, height); } return result; } @Override public final String getId(Uri model) { return model.toString(); } protected abstract DataFetcher<T> getLocalUriFetcher(Context context, Uri uri); private boolean isLocalUri(String scheme) { return ContentResolver.SCHEME_FILE.equals(scheme) || ContentResolver.SCHEME_CONTENT.equals(scheme) || ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme); } }