Merge "Revert "Use toolkit instead of renderscript in SystemUI""

This commit is contained in:
Prashanth Swaminathan
2023-03-17 18:09:15 +00:00
committed by Gerrit Code Review
2 changed files with 24 additions and 6 deletions

View File

@@ -177,7 +177,6 @@ android_library {
"lottie", "lottie",
"LowLightDreamLib", "LowLightDreamLib",
"motion_tool_lib", "motion_tool_lib",
"renderscript_toolkit",
], ],
manifest: "AndroidManifest.xml", manifest: "AndroidManifest.xml",
@@ -271,7 +270,6 @@ android_library {
"WindowManager-Shell", "WindowManager-Shell",
"LowLightDreamLib", "LowLightDreamLib",
"motion_tool_lib", "motion_tool_lib",
"renderscript_toolkit",
"androidx.core_core-animation-testing-nodeps", "androidx.core_core-animation-testing-nodeps",
], ],
} }

View File

@@ -21,17 +21,20 @@ import android.graphics.Bitmap
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.Point import android.graphics.Point
import android.graphics.Rect import android.graphics.Rect
import android.renderscript.Allocation
import android.renderscript.Element
import android.renderscript.RenderScript
import android.renderscript.ScriptIntrinsicBlur
import android.util.Log import android.util.Log
import android.util.MathUtils import android.util.MathUtils
import com.android.internal.graphics.ColorUtils import com.android.internal.graphics.ColorUtils
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.notification.MediaNotificationProcessor import com.android.systemui.statusbar.notification.MediaNotificationProcessor
import com.google.android.renderscript.Toolkit
import javax.inject.Inject import javax.inject.Inject
private const val TAG = "MediaArtworkProcessor" private const val TAG = "MediaArtworkProcessor"
private const val COLOR_ALPHA = (255 * 0.7f).toInt() private const val COLOR_ALPHA = (255 * 0.7f).toInt()
private const val BLUR_RADIUS = 25 private const val BLUR_RADIUS = 25f
private const val DOWNSAMPLE = 6 private const val DOWNSAMPLE = 6
@SysUISingleton @SysUISingleton
@@ -44,6 +47,10 @@ class MediaArtworkProcessor @Inject constructor() {
if (mArtworkCache != null) { if (mArtworkCache != null) {
return mArtworkCache return mArtworkCache
} }
val renderScript = RenderScript.create(context)
val blur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript))
var input: Allocation? = null
var output: Allocation? = null
var inBitmap: Bitmap? = null var inBitmap: Bitmap? = null
try { try {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@@ -59,8 +66,18 @@ class MediaArtworkProcessor @Inject constructor() {
inBitmap = oldIn.copy(Bitmap.Config.ARGB_8888, false /* isMutable */) inBitmap = oldIn.copy(Bitmap.Config.ARGB_8888, false /* isMutable */)
oldIn.recycle() oldIn.recycle()
} }
val outBitmap = Bitmap.createBitmap(inBitmap.width, inBitmap.height,
Bitmap.Config.ARGB_8888)
input = Allocation.createFromBitmap(renderScript, inBitmap,
Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_GRAPHICS_TEXTURE)
output = Allocation.createFromBitmap(renderScript, outBitmap)
blur.setRadius(BLUR_RADIUS)
blur.setInput(input)
blur.forEach(output)
output.copyTo(outBitmap)
val outBitmap = Toolkit.blur(inBitmap, BLUR_RADIUS)
val swatch = MediaNotificationProcessor.findBackgroundSwatch(artwork) val swatch = MediaNotificationProcessor.findBackgroundSwatch(artwork)
val canvas = Canvas(outBitmap) val canvas = Canvas(outBitmap)
@@ -70,6 +87,9 @@ class MediaArtworkProcessor @Inject constructor() {
Log.e(TAG, "error while processing artwork", ex) Log.e(TAG, "error while processing artwork", ex)
return null return null
} finally { } finally {
input?.destroy()
output?.destroy()
blur.destroy()
inBitmap?.recycle() inBitmap?.recycle()
} }
} }