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