diff --git a/xwords4/android/app/build.gradle b/xwords4/android/app/build.gradle index 15953ef25..b3d9dc53d 100644 --- a/xwords4/android/app/build.gradle +++ b/xwords4/android/app/build.gradle @@ -36,7 +36,7 @@ android { buildToolsVersion '27.0.3' defaultConfig { minSdkVersion 14 - targetSdkVersion 28 + targetSdkVersion 28 // must match ../build.gradle versionCode VERSION_CODE_BASE versionName VERSION_NAME } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Assert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Assert.java index be6faa9c4..4df7486c5 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Assert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Assert.java @@ -36,7 +36,7 @@ public class Assert { if (! val) { Log.e( TAG, "firing assert!" ); DbgUtils.printStack( TAG ); - junit.framework.Assert.fail(); + assert false; } } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardCanvas.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardCanvas.java index b6ae01e58..f8dc0e39c 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardCanvas.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardCanvas.java @@ -30,7 +30,9 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.os.Build; +import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set; @@ -574,6 +576,34 @@ public class BoardCanvas extends Canvas implements DrawCtx { } } + private static Method sSaveMethod; + private void saveImpl( Rect rect ) + { + if ( Build.VERSION.SDK_INT >= 21 ) { + saveLayer( new RectF(rect), null ); + } else { + if ( null == sSaveMethod ) { + try { + Class cls = Class.forName("android.graphics.Canvas"); + sSaveMethod = cls.getDeclaredMethod( "save", new Class[] {int.class} ); + } catch ( NoSuchMethodException | ClassNotFoundException ex ) { + Log.e( TAG, "%s", ex ); + Assert.fail(); + } + } + + final int CLIP_SAVE_FLAG = 0x02; + try { + sSaveMethod.invoke( this, CLIP_SAVE_FLAG ); + Log.d( TAG, "saveImpl() worked" ); + } catch ( java.lang.reflect.InvocationTargetException + | IllegalAccessException ex ) { + Log.e( TAG, "%s", ex ); + Assert.fail(); + } + } + } + private boolean drawTileImpl( Rect rect, String text, int val, int flags, boolean clearBack ) { @@ -583,7 +613,7 @@ public class BoardCanvas extends Canvas implements DrawCtx { boolean notEmpty = (flags & CELL_ISEMPTY) == 0; boolean isCursor = (flags & CELL_ISCURSOR) != 0; - save( Canvas.CLIP_SAVE_FLAG ); + saveImpl( rect ); rect.top += 1; clipRect( rect ); diff --git a/xwords4/android/build.gradle b/xwords4/android/build.gradle index a1c22e28c..40de8fa56 100644 --- a/xwords4/android/build.gradle +++ b/xwords4/android/build.gradle @@ -32,7 +32,7 @@ subprojects { afterEvaluate {project -> if (project.hasProperty("android")) { android { - compileSdkVersion 26 + compileSdkVersion 28 // must match app/build.gradle } } }