diff options
Diffstat (limited to 'shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePath.java')
-rw-r--r-- | shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePath.java | 97 |
1 files changed, 58 insertions, 39 deletions
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePath.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePath.java index c162df5a5..a5c9d2f8e 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePath.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePath.java @@ -10,89 +10,103 @@ import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.nativeruntime.DefaultNativeRuntimeLoader; import org.robolectric.nativeruntime.PathNatives; +import org.robolectric.versioning.AndroidVersions.U; +import org.robolectric.versioning.AndroidVersions.V; /** Shadow for {@link Path} that is backed by native code */ -@Implements(value = Path.class, minSdk = O, isInAndroidSdk = false) +@Implements( + value = Path.class, + minSdk = O, + isInAndroidSdk = false, + callNativeMethodsByDefault = true) public class ShadowNativePath extends ShadowPath { + /** + * The {@link Path} static initializer invokes its own native methods. This has to be deferred + * starting in Android V. + */ + @Implementation(minSdk = V.SDK_INT) + protected static void __staticInitializer__() { + // deferred + } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static long nInit() { DefaultNativeRuntimeLoader.injectAndLoad(); return PathNatives.nInit(); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static long nInit(long nPath) { // Required for pre-P. DefaultNativeRuntimeLoader.injectAndLoad(); return PathNatives.nInit(nPath); } - @Implementation(minSdk = P) + @Implementation(minSdk = P, maxSdk = U.SDK_INT) protected static long nGetFinalizer() { // Required for pre-P. DefaultNativeRuntimeLoader.injectAndLoad(); return PathNatives.nGetFinalizer(); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nSet(long nativeDst, long nSrc) { PathNatives.nSet(nativeDst, nSrc); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nComputeBounds(long nPath, RectF bounds) { PathNatives.nComputeBounds(nPath, bounds); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nIncReserve(long nPath, int extraPtCount) { PathNatives.nIncReserve(nPath, extraPtCount); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nMoveTo(long nPath, float x, float y) { PathNatives.nMoveTo(nPath, x, y); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nRMoveTo(long nPath, float dx, float dy) { PathNatives.nRMoveTo(nPath, dx, dy); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nLineTo(long nPath, float x, float y) { PathNatives.nLineTo(nPath, x, y); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nRLineTo(long nPath, float dx, float dy) { PathNatives.nRLineTo(nPath, dx, dy); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nQuadTo(long nPath, float x1, float y1, float x2, float y2) { PathNatives.nQuadTo(nPath, x1, y1, x2, y2); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nRQuadTo(long nPath, float dx1, float dy1, float dx2, float dy2) { PathNatives.nRQuadTo(nPath, dx1, dy1, dx2, dy2); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nCubicTo( long nPath, float x1, float y1, float x2, float y2, float x3, float y3) { PathNatives.nCubicTo(nPath, x1, y1, x2, y2, x3, y3); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nRCubicTo( long nPath, float x1, float y1, float x2, float y2, float x3, float y3) { PathNatives.nRCubicTo(nPath, x1, y1, x2, y2, x3, y3); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nArcTo( long nPath, float left, @@ -105,29 +119,29 @@ public class ShadowNativePath extends ShadowPath { PathNatives.nArcTo(nPath, left, top, right, bottom, startAngle, sweepAngle, forceMoveTo); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nClose(long nPath) { PathNatives.nClose(nPath); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nAddRect( long nPath, float left, float top, float right, float bottom, int dir) { PathNatives.nAddRect(nPath, left, top, right, bottom, dir); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nAddOval( long nPath, float left, float top, float right, float bottom, int dir) { PathNatives.nAddOval(nPath, left, top, right, bottom, dir); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nAddCircle(long nPath, float x, float y, float radius, int dir) { PathNatives.nAddCircle(nPath, x, y, radius, dir); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nAddArc( long nPath, float left, @@ -139,98 +153,103 @@ public class ShadowNativePath extends ShadowPath { PathNatives.nAddArc(nPath, left, top, right, bottom, startAngle, sweepAngle); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nAddRoundRect( long nPath, float left, float top, float right, float bottom, float rx, float ry, int dir) { PathNatives.nAddRoundRect(nPath, left, top, right, bottom, rx, ry, dir); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nAddRoundRect( long nPath, float left, float top, float right, float bottom, float[] radii, int dir) { PathNatives.nAddRoundRect(nPath, left, top, right, bottom, radii, dir); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nAddPath(long nPath, long src, float dx, float dy) { PathNatives.nAddPath(nPath, src, dx, dy); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nAddPath(long nPath, long src) { PathNatives.nAddPath(nPath, src); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nAddPath(long nPath, long src, long matrix) { PathNatives.nAddPath(nPath, src, matrix); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nOffset(long nPath, float dx, float dy) { PathNatives.nOffset(nPath, dx, dy); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nSetLastPoint(long nPath, float dx, float dy) { PathNatives.nSetLastPoint(nPath, dx, dy); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nTransform(long nPath, long matrix, long dstPath) { PathNatives.nTransform(nPath, matrix, dstPath); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nTransform(long nPath, long matrix) { PathNatives.nTransform(nPath, matrix); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static boolean nOp(long path1, long path2, int op, long result) { return PathNatives.nOp(path1, path2, op, result); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static boolean nIsRect(long nPath, RectF rect) { return PathNatives.nIsRect(nPath, rect); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nReset(long nPath) { PathNatives.nReset(nPath); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nRewind(long nPath) { PathNatives.nRewind(nPath); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static boolean nIsEmpty(long nPath) { return PathNatives.nIsEmpty(nPath); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static boolean nIsConvex(long nPath) { return PathNatives.nIsConvex(nPath); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static int nGetFillType(long nPath) { return PathNatives.nGetFillType(nPath); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static void nSetFillType(long nPath, int ft) { PathNatives.nSetFillType(nPath, ft); } - @Implementation(minSdk = O) + @Implementation(minSdk = O, maxSdk = U.SDK_INT) protected static float[] nApproximate(long nPath, float error) { return PathNatives.nApproximate(nPath, error); } + @Implementation(minSdk = U.SDK_INT, maxSdk = U.SDK_INT) + protected static int nGetGenerationID(long nativePath) { + return 0; + } + @Override public List<Point> getPoints() { throw new UnsupportedOperationException("Legacy ShadowPath description APIs are not supported"); |