From f55efb8abf4328203c4b990f02df0d57a34ab98b Mon Sep 17 00:00:00 2001 From: Jean-François Geyelin Date: Fri, 8 Sep 2023 17:50:54 +0200 Subject: Throw an exception when using RenderScript ScriptC with an API level above 34 Bug: 297019750 Test: m -j; m cts -j; cts-tradefed run commandAndExit cts --skip-system-status-check com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker --skip-device-info -m RenderscriptTest Change-Id: I2892ac2316e9756b017f241cc9b537e18d510b31 --- rs/java/android/renderscript/ScriptC.java | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'rs') diff --git a/rs/java/android/renderscript/ScriptC.java b/rs/java/android/renderscript/ScriptC.java index 1866a9983495..eb7e9aed1944 100644 --- a/rs/java/android/renderscript/ScriptC.java +++ b/rs/java/android/renderscript/ScriptC.java @@ -16,9 +16,12 @@ package android.renderscript; +import android.app.compat.CompatChanges; +import android.compat.annotation.ChangeId; +import android.compat.annotation.EnabledAfter; import android.content.res.Resources; +import android.util.Slog; -import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -34,6 +37,15 @@ import java.io.InputStream; public class ScriptC extends Script { private static final String TAG = "ScriptC"; + /** + * In targetSdkVersion 35 and above, Renderscript's ScriptC stops being supported + * and an exception is thrown when the class is instantiated. + * In targetSdkVersion 34 and below, Renderscript's ScriptC still works. + */ + @ChangeId + @EnabledAfter(targetSdkVersion = 35) + private static final long RENDERSCRIPT_SCRIPTC_DEPRECATION_CHANGE_ID = 297019750L; + /** * Only intended for use by the generated derived classes. * @@ -89,7 +101,20 @@ public class ScriptC extends Script { setID(id); } - private static synchronized long internalCreate(RenderScript rs, Resources resources, int resourceID) { + private static void throwExceptionIfSDKTooHigh() { + String message = + "ScriptC scripts are not supported when targeting an API Level >= 35. Please refer " + + "to https://developer.android.com/guide/topics/renderscript/migration-guide " + + "for proposed alternatives."; + Slog.w(TAG, message); + if (CompatChanges.isChangeEnabled(RENDERSCRIPT_SCRIPTC_DEPRECATION_CHANGE_ID)) { + throw new UnsupportedOperationException(message); + } + } + + private static synchronized long internalCreate( + RenderScript rs, Resources resources, int resourceID) { + throwExceptionIfSDKTooHigh(); byte[] pgm; int pgmLength; InputStream is = resources.openRawResource(resourceID); @@ -125,6 +150,7 @@ public class ScriptC extends Script { } private static synchronized long internalStringCreate(RenderScript rs, String resName, byte[] bitcode) { + throwExceptionIfSDKTooHigh(); // Log.v(TAG, "Create script for resource = " + resName); return rs.nScriptCCreate(resName, RenderScript.getCachePath(), bitcode, bitcode.length); } -- cgit v1.2.3-59-g8ed1b