aboutsummaryrefslogtreecommitdiff
path: root/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeBitmap.java
diff options
context:
space:
mode:
Diffstat (limited to 'shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeBitmap.java')
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeBitmap.java107
1 files changed, 61 insertions, 46 deletions
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeBitmap.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeBitmap.java
index a1ff96f25..140ba87ac 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeBitmap.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeBitmap.java
@@ -1,6 +1,5 @@
package org.robolectric.shadows;
-import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
import static android.os.Build.VERSION_CODES.LOLLIPOP;
import static android.os.Build.VERSION_CODES.M;
import static android.os.Build.VERSION_CODES.N;
@@ -28,7 +27,6 @@ import java.util.List;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
-import org.robolectric.annotation.RealObject;
import org.robolectric.annotation.Resetter;
import org.robolectric.nativeruntime.BitmapNatives;
import org.robolectric.nativeruntime.ColorSpaceRgbNatives;
@@ -40,11 +38,13 @@ import org.robolectric.util.reflector.Static;
import org.robolectric.versioning.AndroidVersions.U;
/** Shadow for {@link Bitmap} that is backed by native code */
-@Implements(value = Bitmap.class, looseSignatures = true, minSdk = O, isInAndroidSdk = false)
+@Implements(
+ value = Bitmap.class,
+ looseSignatures = true,
+ minSdk = O,
+ isInAndroidSdk = false,
+ callNativeMethodsByDefault = true)
public class ShadowNativeBitmap extends ShadowBitmap {
-
- @RealObject Bitmap realBitmap;
-
private int createdFromResId;
private static final List<Long> colorSpaceAllocationsP =
@@ -55,7 +55,7 @@ public class ShadowNativeBitmap extends ShadowBitmap {
this.createdFromResId = createdFromResId;
}
- @Implementation(minSdk = Q)
+ @Implementation(minSdk = Q, maxSdk = U.SDK_INT)
protected static Bitmap nativeCreate(
int[] colors,
int offset,
@@ -100,75 +100,75 @@ public class ShadowNativeBitmap extends ShadowBitmap {
colors, offset, stride, width, height, nativeConfig, mutable, colorSpacePtr);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static Bitmap nativeCopy(long nativeSrcBitmap, int nativeConfig, boolean isMutable) {
return BitmapNatives.nativeCopy(nativeSrcBitmap, nativeConfig, isMutable);
}
- @Implementation(minSdk = M)
+ @Implementation(minSdk = M, maxSdk = U.SDK_INT)
protected static Bitmap nativeCopyAshmem(long nativeSrcBitmap) {
return BitmapNatives.nativeCopyAshmem(nativeSrcBitmap);
}
- @Implementation(minSdk = N)
+ @Implementation(minSdk = N, maxSdk = U.SDK_INT)
protected static Bitmap nativeCopyAshmemConfig(long nativeSrcBitmap, int nativeConfig) {
return BitmapNatives.nativeCopyAshmemConfig(nativeSrcBitmap, nativeConfig);
}
- @Implementation(minSdk = N)
+ @Implementation(minSdk = N, maxSdk = U.SDK_INT)
protected static long nativeGetNativeFinalizer() {
return BitmapNatives.nativeGetNativeFinalizer();
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static Object nativeRecycle(Object nativeBitmap) {
BitmapNatives.nativeRecycle((long) nativeBitmap);
return true;
}
- @Implementation(minSdk = O)
+ @Implementation(minSdk = O, maxSdk = U.SDK_INT)
protected static void nativeReconfigure(
long nativeBitmap, int width, int height, int config, boolean isPremultiplied) {
BitmapNatives.nativeReconfigure(nativeBitmap, width, height, config, isPremultiplied);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static boolean nativeCompress(
long nativeBitmap, int format, int quality, OutputStream stream, byte[] tempStorage) {
return BitmapNatives.nativeCompress(nativeBitmap, format, quality, stream, tempStorage);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static void nativeErase(long nativeBitmap, int color) {
BitmapNatives.nativeErase(nativeBitmap, color);
}
- @Implementation(minSdk = Q)
+ @Implementation(minSdk = Q, maxSdk = U.SDK_INT)
protected static void nativeErase(long nativeBitmap, long colorSpacePtr, long color) {
BitmapNatives.nativeErase(nativeBitmap, colorSpacePtr, color);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static int nativeRowBytes(long nativeBitmap) {
return BitmapNatives.nativeRowBytes(nativeBitmap);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static int nativeConfig(long nativeBitmap) {
return BitmapNatives.nativeConfig(nativeBitmap);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static int nativeGetPixel(long nativeBitmap, int x, int y) {
return BitmapNatives.nativeGetPixel(nativeBitmap, x, y);
}
- @Implementation(minSdk = Q)
+ @Implementation(minSdk = Q, maxSdk = U.SDK_INT)
protected static long nativeGetColor(long nativeBitmap, int x, int y) {
return BitmapNatives.nativeGetColor(nativeBitmap, x, y);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static void nativeGetPixels(
long nativeBitmap,
int[] pixels,
@@ -181,12 +181,12 @@ public class ShadowNativeBitmap extends ShadowBitmap {
BitmapNatives.nativeGetPixels(nativeBitmap, pixels, offset, stride, x, y, width, height);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static void nativeSetPixel(long nativeBitmap, int x, int y, int color) {
BitmapNatives.nativeSetPixel(nativeBitmap, x, y, color);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static void nativeSetPixels(
long nativeBitmap,
int[] colors,
@@ -199,85 +199,85 @@ public class ShadowNativeBitmap extends ShadowBitmap {
BitmapNatives.nativeSetPixels(nativeBitmap, colors, offset, stride, x, y, width, height);
}
- @Implementation
+ @Implementation(maxSdk = U.SDK_INT)
protected static void nativeCopyPixelsToBuffer(long nativeBitmap, Buffer dst) {
BitmapNatives.nativeCopyPixelsToBuffer(nativeBitmap, dst);
}
- @Implementation
+ @Implementation(maxSdk = U.SDK_INT)
protected static void nativeCopyPixelsFromBuffer(long nativeBitmap, Buffer src) {
BitmapNatives.nativeCopyPixelsFromBuffer(nativeBitmap, src);
}
- @Implementation
+ @Implementation(maxSdk = U.SDK_INT)
protected static int nativeGenerationId(long nativeBitmap) {
return BitmapNatives.nativeGenerationId(nativeBitmap);
}
// returns a new bitmap built from the native bitmap's alpha, and the paint
- @Implementation
+ @Implementation(maxSdk = U.SDK_INT)
protected static Bitmap nativeExtractAlpha(long nativeBitmap, long nativePaint, int[] offsetXY) {
return BitmapNatives.nativeExtractAlpha(nativeBitmap, nativePaint, offsetXY);
}
- @Implementation
+ @Implementation(maxSdk = U.SDK_INT)
protected static boolean nativeHasAlpha(long nativeBitmap) {
return BitmapNatives.nativeHasAlpha(nativeBitmap);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static boolean nativeIsPremultiplied(long nativeBitmap) {
return BitmapNatives.nativeIsPremultiplied(nativeBitmap);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static void nativeSetPremultiplied(long nativeBitmap, boolean isPremul) {
BitmapNatives.nativeSetPremultiplied(nativeBitmap, isPremul);
}
- @Implementation(minSdk = LOLLIPOP)
+ @Implementation(minSdk = LOLLIPOP, maxSdk = U.SDK_INT)
protected static void nativeSetHasAlpha(
long nativeBitmap, boolean hasAlpha, boolean requestPremul) {
BitmapNatives.nativeSetHasAlpha(nativeBitmap, hasAlpha, requestPremul);
}
- @Implementation(minSdk = JELLY_BEAN_MR1)
+ @Implementation(maxSdk = U.SDK_INT)
protected static boolean nativeHasMipMap(long nativeBitmap) {
return BitmapNatives.nativeHasMipMap(nativeBitmap);
}
- @Implementation(minSdk = JELLY_BEAN_MR1)
+ @Implementation(maxSdk = U.SDK_INT)
protected static void nativeSetHasMipMap(long nativeBitmap, boolean hasMipMap) {
BitmapNatives.nativeSetHasMipMap(nativeBitmap, hasMipMap);
}
- @Implementation
+ @Implementation(maxSdk = U.SDK_INT)
protected static boolean nativeSameAs(long nativeBitmap0, long nativeBitmap1) {
return BitmapNatives.nativeSameAs(nativeBitmap0, nativeBitmap1);
}
- @Implementation(minSdk = N_MR1)
+ @Implementation(minSdk = N_MR1, maxSdk = U.SDK_INT)
protected static void nativePrepareToDraw(long nativeBitmap) {
BitmapNatives.nativePrepareToDraw(nativeBitmap);
}
- @Implementation(minSdk = O)
+ @Implementation(minSdk = O, maxSdk = U.SDK_INT)
protected static int nativeGetAllocationByteCount(long nativeBitmap) {
return BitmapNatives.nativeGetAllocationByteCount(nativeBitmap);
}
- @Implementation(minSdk = O)
+ @Implementation(minSdk = O, maxSdk = U.SDK_INT)
protected static Bitmap nativeCopyPreserveInternalConfig(long nativeBitmap) {
return BitmapNatives.nativeCopyPreserveInternalConfig(nativeBitmap);
}
- @Implementation(minSdk = Q)
+ @Implementation(minSdk = Q, maxSdk = U.SDK_INT)
protected static Bitmap nativeWrapHardwareBufferBitmap(
HardwareBuffer buffer, long nativeColorSpace) {
return BitmapNatives.nativeWrapHardwareBufferBitmap(buffer, nativeColorSpace);
}
- @Implementation(minSdk = R)
+ @Implementation(minSdk = R, maxSdk = U.SDK_INT)
protected static HardwareBuffer nativeGetHardwareBuffer(long nativeBitmap) {
return BitmapNatives.nativeGetHardwareBuffer(nativeBitmap);
}
@@ -310,41 +310,51 @@ public class ShadowNativeBitmap extends ShadowBitmap {
return true;
}
- @Implementation(minSdk = Q)
+ @Implementation(minSdk = Q, maxSdk = U.SDK_INT)
protected static ColorSpace nativeComputeColorSpace(long nativePtr) {
return BitmapNatives.nativeComputeColorSpace(nativePtr);
}
- @Implementation(minSdk = Q)
+ @Implementation(minSdk = Q, maxSdk = U.SDK_INT)
protected static void nativeSetColorSpace(long nativePtr, long nativeColorSpace) {
BitmapNatives.nativeSetColorSpace(nativePtr, nativeColorSpace);
}
- @Implementation(minSdk = O)
+ @Implementation(minSdk = O, maxSdk = U.SDK_INT)
protected static boolean nativeIsSRGB(long nativePtr) {
return BitmapNatives.nativeIsSRGB(nativePtr);
}
- @Implementation(minSdk = P)
+ @Implementation(minSdk = P, maxSdk = U.SDK_INT)
protected static boolean nativeIsSRGBLinear(long nativePtr) {
return BitmapNatives.nativeIsSRGBLinear(nativePtr);
}
- @Implementation(minSdk = Q)
+ @Implementation(minSdk = Q, maxSdk = U.SDK_INT)
protected static void nativeSetImmutable(long nativePtr) {
BitmapNatives.nativeSetImmutable(nativePtr);
}
- @Implementation(minSdk = Q)
+ @Implementation(minSdk = Q, maxSdk = U.SDK_INT)
protected static boolean nativeIsImmutable(long nativePtr) {
return BitmapNatives.nativeIsImmutable(nativePtr);
}
- @Implementation(minSdk = S)
+ @Implementation(minSdk = S, maxSdk = U.SDK_INT)
protected static boolean nativeIsBackedByAshmem(long nativePtr) {
return BitmapNatives.nativeIsBackedByAshmem(nativePtr);
}
+ /**
+ * This is called by {@link Bitmap#getGainmap} to check if a Gainmap exists for the Bitmap. This
+ * method must be present in Android U and below to avoid an UnsatisfiedLinkError.
+ */
+ @Implementation(minSdk = U.SDK_INT)
+ protected static Object nativeExtractGainmap(Object nativePtr) {
+ // No-op implementation
+ return null;
+ }
+
@ForType(ColorSpace.class)
interface ColorSpaceReflector {
@Accessor("ILLUMINANT_D50_XYZ")
@@ -426,6 +436,11 @@ public class ShadowNativeBitmap extends ShadowBitmap {
return bitmap;
}
+ @Implementation(minSdk = O, maxSdk = P)
+ protected static void nativeCopyColorSpace(long srcBitmap, long dstBitmap) {
+ BitmapNatives.nativeCopyColorSpaceP(srcBitmap, dstBitmap);
+ }
+
@Override
public Bitmap getCreatedFromBitmap() {
throw new UnsupportedOperationException("Legacy ShadowBitmap APIs are not supported");