diff --git a/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java b/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java
index e7255a0..d4a54ce 100644
--- a/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java
+++ b/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java
@@ -10,36 +10,38 @@
  * 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 Class<? extends T> clazz;
-  private 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) {
+    private Class<? extends T> clazz;
+    private 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);
+
+    /**
+     * 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);
+        }
+    }
+
 }
diff --git a/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java b/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java
index e2b5ce6..4b521c8 100644
--- a/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java
+++ b/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java
@@ -7,13 +7,15 @@
  * @param <T> the class of decoder that will be produced.
  */
 public interface DecoderFactory<T> {
-  /**
-   * Produce a new instance of a decoder with type {@link T}.
-   * @return a new instance of your decoder.
-   * @throws IllegalAccessException if the factory class cannot be instantiated.
-   * @throws InstantiationException if the factory class cannot be instantiated.
-   * @throws NoSuchMethodException if the factory class cannot be instantiated.
-   * @throws InvocationTargetException if the factory class cannot be instantiated.
-   */
-  T make() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException;
+
+    /**
+     * Produce a new instance of a decoder with type {@link T}.
+     * @return a new instance of your decoder.
+     * @throws IllegalAccessException if the factory class cannot be instantiated.
+     * @throws InstantiationException if the factory class cannot be instantiated.
+     * @throws NoSuchMethodException if the factory class cannot be instantiated.
+     * @throws InvocationTargetException if the factory class cannot be instantiated.
+     */
+    T make() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException;
+
 }
diff --git a/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageDecoder.java b/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageDecoder.java
index c403b7e..004f875 100644
--- a/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageDecoder.java
+++ b/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageDecoder.java
@@ -2,8 +2,6 @@
 
 import android.content.Context;
 import android.graphics.Bitmap;
-import android.graphics.Point;
-import android.graphics.Rect;
 import android.net.Uri;
 
 /**
diff --git a/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaPooledImageRegionDecoder.java b/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaPooledImageRegionDecoder.java
index 7074c8c..d9c8ac1 100644
--- a/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaPooledImageRegionDecoder.java
+++ b/library/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaPooledImageRegionDecoder.java
@@ -97,6 +97,8 @@
      * Controls logging of debug messages. All instances are affected.
      * @param debug true to enable debug logging, false to disable.
      */
+    @Keep
+    @SuppressWarnings("unused")
     public static void setDebug(boolean debug) {
         SkiaPooledImageRegionDecoder.debug = debug;
     }
