#282 Moved to EXIF support library. Minimum SDK changed 10 -> 14.
diff --git a/library/build.gradle b/library/build.gradle
index 529c201..413974e 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -14,6 +14,7 @@
dependencies {
implementation 'com.android.support:support-annotations:27.0.0'
+ implementation 'com.android.support:exifinterface:26.1.0'
}
apply from: rootProject.file('release.gradle')
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
index 1d519cd..ba9fe29 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/library/src/main/AndroidManifest.xml
@@ -3,5 +3,5 @@
package="com.davemorrissey.labs.subscaleview"
android:versionCode="1"
android:versionName="1.0">
- <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"/>
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14"/>
</manifest>
diff --git a/library/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java b/library/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java
index 72c748e..b3505f1 100644
--- a/library/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java
+++ b/library/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java
@@ -30,10 +30,9 @@
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;
-import android.media.ExifInterface;
+import android.support.media.ExifInterface;
import android.net.Uri;
import android.os.AsyncTask;
-import android.os.Build.VERSION;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
@@ -57,15 +56,12 @@
import com.davemorrissey.labs.subscaleview.decoder.SkiaImageRegionDecoder;
import java.lang.ref.WeakReference;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.concurrent.Executor;
/**
* Displays an image subsampled as necessary to avoid loading too much image data into memory. After a pinch to zoom in,
@@ -1836,18 +1832,11 @@
}
private void execute(AsyncTask<Void, Void, ?> asyncTask) {
- if (parallelLoadingEnabled && VERSION.SDK_INT >= 11) {
- try {
- Field executorField = AsyncTask.class.getField("THREAD_POOL_EXECUTOR");
- Executor executor = (Executor)executorField.get(null);
- Method executeMethod = AsyncTask.class.getMethod("executeOnExecutor", Executor.class, Object[].class);
- executeMethod.invoke(asyncTask, executor, null);
- return;
- } catch (Exception e) {
- Log.i(TAG, "Failed to execute AsyncTask on thread pool executor, falling back to single threaded executor", e);
- }
+ if (parallelLoadingEnabled) {
+ asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ } else {
+ asyncTask.execute();
}
- asyncTask.execute();
}
private static class Tile {
@@ -1925,20 +1914,10 @@
}
/**
- * In SDK 14 and above, use canvas max bitmap width and height instead of the default 2048, to avoid redundant tiling.
+ * Use canvas max bitmap width and height instead of the default 2048, to avoid redundant tiling.
*/
private Point getMaxBitmapDimensions(Canvas canvas) {
- int maxWidth = 2048;
- int maxHeight = 2048;
- if (VERSION.SDK_INT >= 14) {
- try {
- maxWidth = (Integer)Canvas.class.getMethod("getMaximumBitmapWidth").invoke(canvas);
- maxHeight = (Integer)Canvas.class.getMethod("getMaximumBitmapHeight").invoke(canvas);
- } catch (Exception e) {
- // Return default
- }
- }
- return new Point(Math.min(maxWidth, maxTileWidth), Math.min(maxHeight, maxTileHeight));
+ return new Point(Math.min(canvas.getMaximumBitmapWidth(), maxTileWidth), Math.min(canvas.getMaximumBitmapHeight(), maxTileHeight));
}
/**
@@ -2624,10 +2603,9 @@
}
/**
- * Toggle parallel loading. When enabled, tiles are loaded using the thread pool executor available
- * in SDK 11+. In older versions this has no effect. Parallel loading may use more memory and there
- * is a possibility that it will make the tile loading unreliable, but it reduces the chances of
- * an app's background processes blocking loading.
+ * Toggle parallel loading. When enabled, tiles are loaded using the thread pool executor.
+ * Parallel loading may use more memory and there is a possibility that it will make the tile
+ * loading unreliable, but it reduces the chances of an app's background processes blocking loading.
* @param parallelLoadingEnabled Whether to run AsyncTasks using a thread pool executor.
*/
public void setParallelLoadingEnabled(boolean parallelLoadingEnabled) {