All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bumptech.glide.load.model.ModelLoader Maven / Gradle / Ivy

package com.bumptech.glide.load.model;

import android.support.annotation.Nullable;
import com.bumptech.glide.load.Key;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.data.DataFetcher;
import com.bumptech.glide.util.Preconditions;
import java.util.Collections;
import java.util.List;

/**
 * A factory interface for translating an arbitrarily complex data model into a concrete data type
 * that can be used by an {@link DataFetcher} to obtain the data for a resource represented by the
 * model.
 *
 * 

This interface has two objectives: 1. To translate a specific model into a data type that can * be decoded into a resource. * * 2. To allow a model to be combined with the dimensions of the view to fetch a resource of a * specific size. * * This not only avoids having to duplicate dimensions in xml and in your code in order to determine * the size of a view on devices with different densities, but also allows you to use layout weights * or otherwise programmatically put the dimensions of the view without forcing you to fetch a * generic resource size. * * The smaller the resource you fetch, the less bandwidth and battery life you use, and the lower * your memory footprint per resource.

* * @param The type of the model. * @param The type of the data that can be used by a * {@link com.bumptech.glide.load.ResourceDecoder} to decode a resource. */ public interface ModelLoader { /** * Contains a set of {@link com.bumptech.glide.load.Key Keys} identifying the source of the load, * alternate cache keys pointing to equivalent data, and a * {@link com.bumptech.glide.load.data.DataFetcher} that can be used to fetch data not found in * cache. * * @param The type of data that well be loaded. */ class LoadData { public final Key sourceKey; public final List alternateKeys; public final DataFetcher fetcher; public LoadData(Key sourceKey, DataFetcher fetcher) { this(sourceKey, Collections.emptyList(), fetcher); } public LoadData(Key sourceKey, List alternateKeys, DataFetcher fetcher) { this.sourceKey = Preconditions.checkNotNull(sourceKey); this.alternateKeys = Preconditions.checkNotNull(alternateKeys); this.fetcher = Preconditions.checkNotNull(fetcher); } } /** * Returns a {@link com.bumptech.glide.load.model.ModelLoader.LoadData} containing a * {@link com.bumptech.glide.load.data.DataFetcher} required to decode the resource * represented by this model, as well as a set of {@link com.bumptech.glide.load.Key Keys} that * identify the data loaded by the {@link com.bumptech.glide.load.data.DataFetcher} as well as an * optional list of alternate keys from which equivalent data can be loaded. The * {@link DataFetcher} will not be used if the resource is already cached. * *

Note - If no valid data fetcher can be returned (for example if a model has a null URL), * then it is acceptable to return a null data fetcher from this method.

* * @param model The model representing the resource. * @param width The width in pixels of the view or target the resource will be loaded into, or * {@link com.bumptech.glide.request.target.Target#SIZE_ORIGINAL} to indicate that * the resource should be loaded at its original width. * @param height The height in pixels of the view or target the resource will be loaded into, or * {@link com.bumptech.glide.request.target.Target#SIZE_ORIGINAL} to indicate that * the resource should be loaded at its original height. */ @Nullable LoadData buildLoadData(Model model, int width, int height, Options options); /** * Returns true if the given model is a of a recognized type that this loader can probably load. * *

For example, you may want multiple Uri -> InputStream loaders. One might handle media * store Uris, another might handle asset Uris, and a third might handle file Uris etc.

* *

This method is generally expected to do no I/O and complete quickly, so best effort * results are acceptable. {@link ModelLoader ModelLoaders} that return true from this method may * return {@code null} from {@link #buildLoadData(Object, int, int, Options)}

*/ boolean handles(Model model); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy