blob: 870489ff1439d59f1a8eeb7f3774d26163136390 [file] [log] [blame]
package com.davemorrissey.labs.subscaleview.decoder;
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* Compatibility factory to instantiate decoders with empty public constructors.
* @param <T> The base type of the decoder this factory will produce.
*/
@SuppressWarnings("WeakerAccess")
public class CompatDecoderFactory<T> implements DecoderFactory<T> {
private final Class<? extends T> clazz;
private final Bitmap.Config bitmapConfig;
/**
* Construct a factory for the given class. This must have a default constructor.
* @param clazz a class that implements {@link ImageDecoder} or {@link ImageRegionDecoder}.
*/
public CompatDecoderFactory(@NonNull Class<? extends T> clazz) {
this(clazz, null);
}
/**
* Construct a factory for the given class. This must have a constructor that accepts a {@link Bitmap.Config} instance.
* @param clazz a class that implements {@link ImageDecoder} or {@link ImageRegionDecoder}.
* @param bitmapConfig bitmap configuration to be used when loading images.
*/
public CompatDecoderFactory(@NonNull Class<? extends T> clazz, Bitmap.Config bitmapConfig) {
this.clazz = clazz;
this.bitmapConfig = bitmapConfig;
}
@Override
public T make() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
if (bitmapConfig == null) {
return clazz.newInstance();
} else {
Constructor<? extends T> ctor = clazz.getConstructor(Bitmap.Config.class);
return ctor.newInstance(bitmapConfig);
}
}
}