blob: e3ceda891ffcaac916b58544bcb4fe8c37487b24 [file] [log] [blame]
package com.bumptech.glide.request;
import com.bumptech.glide.request.target.Target;
/**
* A class for monitoring the status of a request while images load.
*
* @param <T> The type of the model being loaded.
* @param <R> The type of resource being loaded.
*/
public interface RequestListener<T, R> {
/**
* Called when an exception occurs during a load. Will only be called if we currently want to display an image
* for the given model in the given target. It is recommended to create a single instance per activity/fragment
* rather than instantiate a new object for each call to {@code Glide.load()} to avoid object churn.
*
* <p>
* It is safe to reload this or a different model or change what is displayed in the target at this point.
* For example:
* <pre>
* <code>
* public void onException(Exception e, ModelType model, Target target) {
* target.setPlaceholder(R.drawable.a_specific_error_for_my_exception);
* Glide.load(model).into(target);
* }
* </code>
* </pre>
* </p>
*
* <p>
* Note - if you want to reload this or any other model after an exception, you will need to include all
* relevant builder calls (like centerCrop, placeholder etc).
* </p>
*
* @param e The exception, or null
* @param model The model we were trying to load when the exception occurred
* @param target The {@link Target} we were trying to load the image into
* @return True if the listener has handled updating the target for the given exception, false to allow
* Glide's request to update the target.
*/
public abstract boolean onException(Exception e, T model, Target target, boolean isFirstImage);
/**
* Called when a load completes successfully, immediately after {@link Target#onResourceReady(Object)}.
*
* @param resource The resource that was loaded for the target.
* @param model The specific model that was used to load the image.
* @param target The target the model was loaded into.
* @param isFromMemoryCache True if the load completed synchronously (useful for determining whether or not to
* animate)
* @param isFirstResource True if this is the first resource to in this load to be loaded into the target. For
* example when loading a thumbnail and a fullsize image, this will be true for the first
* image to load and false for the second.
* @return True if the listener has handled setting the resource on the target (including any animations), false to
* allow Glide's request to update the target (again including animations).
*/
public abstract boolean onResourceReady(R resource, T model, Target target, boolean isFromMemoryCache,
boolean isFirstResource);
}