diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index bfd2cd653ae..0880cd49074 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -6343,13 +6343,19 @@ public final class com/facebook/react/views/image/ImageResizeMode { public static final fun toTileMode (Ljava/lang/String;)Landroid/graphics/Shader$TileMode; } -public class com/facebook/react/views/image/MultiPostprocessor : com/facebook/imagepipeline/request/Postprocessor { - public static fun from (Ljava/util/List;)Lcom/facebook/imagepipeline/request/Postprocessor; +public final class com/facebook/react/views/image/MultiPostprocessor : com/facebook/imagepipeline/request/Postprocessor { + public static final field Companion Lcom/facebook/react/views/image/MultiPostprocessor$Companion; + public synthetic fun (Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public static final fun from (Ljava/util/List;)Lcom/facebook/imagepipeline/request/Postprocessor; public fun getName ()Ljava/lang/String; public fun getPostprocessorCacheKey ()Lcom/facebook/cache/common/CacheKey; public fun process (Landroid/graphics/Bitmap;Lcom/facebook/imagepipeline/bitmaps/PlatformBitmapFactory;)Lcom/facebook/common/references/CloseableReference; } +public final class com/facebook/react/views/image/MultiPostprocessor$Companion { + public final fun from (Ljava/util/List;)Lcom/facebook/imagepipeline/request/Postprocessor; +} + public abstract interface class com/facebook/react/views/image/ReactCallerContextFactory { public abstract fun getOrCreateCallerContext (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/MultiPostprocessor.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/MultiPostprocessor.java deleted file mode 100644 index 50a68e0d590..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/MultiPostprocessor.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.views.image; - -import android.graphics.Bitmap; -import androidx.annotation.Nullable; -import com.facebook.cache.common.CacheKey; -import com.facebook.cache.common.MultiCacheKey; -import com.facebook.common.references.CloseableReference; -import com.facebook.imagepipeline.bitmaps.PlatformBitmapFactory; -import com.facebook.imagepipeline.request.Postprocessor; -import com.facebook.infer.annotation.Nullsafe; -import java.util.LinkedList; -import java.util.List; - -@Nullsafe(Nullsafe.Mode.LOCAL) -public class MultiPostprocessor implements Postprocessor { - private final List mPostprocessors; - - @Nullable - public static Postprocessor from(List postprocessors) { - switch (postprocessors.size()) { - case 0: - return null; - case 1: - return postprocessors.get(0); - default: - return new MultiPostprocessor(postprocessors); - } - } - - private MultiPostprocessor(List postprocessors) { - mPostprocessors = new LinkedList<>(postprocessors); - } - - @Override - public String getName() { - StringBuilder name = new StringBuilder(); - for (Postprocessor p : mPostprocessors) { - if (name.length() > 0) { - name.append(","); - } - name.append(p.getName()); - } - name.insert(0, "MultiPostProcessor ("); - name.append(")"); - return name.toString(); - } - - @Override - public CacheKey getPostprocessorCacheKey() { - LinkedList keys = new LinkedList<>(); - for (Postprocessor p : mPostprocessors) { - CacheKey key = p.getPostprocessorCacheKey(); - if (key != null) { - keys.add(key); - } - } - return new MultiCacheKey(keys); - } - - @Override - public CloseableReference process( - Bitmap sourceBitmap, PlatformBitmapFactory bitmapFactory) { - @Nullable CloseableReference prevBitmap = null, nextBitmap = null; - - try { - for (Postprocessor p : mPostprocessors) { - nextBitmap = p.process(prevBitmap != null ? prevBitmap.get() : sourceBitmap, bitmapFactory); - CloseableReference.closeSafely(prevBitmap); - prevBitmap = nextBitmap.clone(); - } - if (nextBitmap == null) { - throw new IllegalStateException( - "MultiPostprocessor returned null bitmap - Number of Postprocessors: " - + mPostprocessors.size()); - } else { - return nextBitmap.clone(); - } - } finally { - CloseableReference.closeSafely(nextBitmap); - } - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/MultiPostprocessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/MultiPostprocessor.kt new file mode 100644 index 00000000000..d0b7d48d5dc --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/MultiPostprocessor.kt @@ -0,0 +1,61 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.views.image + +import android.graphics.Bitmap +import com.facebook.cache.common.CacheKey +import com.facebook.cache.common.MultiCacheKey +import com.facebook.common.references.CloseableReference +import com.facebook.imagepipeline.bitmaps.PlatformBitmapFactory +import com.facebook.imagepipeline.request.Postprocessor +import java.util.LinkedList + +public class MultiPostprocessor private constructor(postprocessors: List) : + Postprocessor { + + private val postprocessors: List = LinkedList(postprocessors) + + override fun getName(): String = "MultiPostProcessor (${postprocessors.joinToString(",")})" + + override fun getPostprocessorCacheKey(): CacheKey = + MultiCacheKey(postprocessors.map { it.postprocessorCacheKey }) + + public override fun process( + sourceBitmap: Bitmap, + bitmapFactory: PlatformBitmapFactory + ): CloseableReference { + var prevBitmap: CloseableReference? = null + var nextBitmap: CloseableReference? = null + + try { + for (p in postprocessors) { + nextBitmap = p.process(prevBitmap?.get() ?: sourceBitmap, bitmapFactory) + CloseableReference.closeSafely(prevBitmap) + prevBitmap = nextBitmap.clone() + } + checkNotNull(nextBitmap) { + ("MultiPostprocessor returned null bitmap - Number of Postprocessors: " + + postprocessors.size) + } + return nextBitmap.clone() + } finally { + CloseableReference.closeSafely(nextBitmap) + } + } + + public companion object { + @JvmStatic + public fun from(postprocessors: List): Postprocessor? { + return when (postprocessors.size) { + 0 -> null + 1 -> postprocessors[0] + else -> MultiPostprocessor(postprocessors) + } + } + } +}