Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f55efb8a authored by Jean-François Geyelin's avatar Jean-François Geyelin
Browse files

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
parent 9361d76b
Loading
Loading
Loading
Loading
+28 −2
Original line number Diff line number Diff line
@@ -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);
    }