Convert com/facebook/react/views/image/MultiPostprocessor.java to Kotlin (#45712)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45712

This moves the first remaining file inside views/image from Java to Kotlin

Changelog:
[Internal] [Changed] - Convert com/facebook/react/views/image/MultiPostprocessor.java to Kotlin

Reviewed By: rshest

Differential Revision: D60283278

fbshipit-source-id: 800ba559750aca0bc9bf7311d0717c6f9bf635a7
This commit is contained in:
Nicola Corti
2024-07-27 10:42:29 -07:00
committed by Facebook GitHub Bot
parent f888f2434c
commit 878802fe2a
3 changed files with 69 additions and 91 deletions
@@ -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 <init> (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;
}
@@ -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<Postprocessor> mPostprocessors;
@Nullable
public static Postprocessor from(List<Postprocessor> postprocessors) {
switch (postprocessors.size()) {
case 0:
return null;
case 1:
return postprocessors.get(0);
default:
return new MultiPostprocessor(postprocessors);
}
}
private MultiPostprocessor(List<Postprocessor> 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<CacheKey> keys = new LinkedList<>();
for (Postprocessor p : mPostprocessors) {
CacheKey key = p.getPostprocessorCacheKey();
if (key != null) {
keys.add(key);
}
}
return new MultiCacheKey(keys);
}
@Override
public CloseableReference<Bitmap> process(
Bitmap sourceBitmap, PlatformBitmapFactory bitmapFactory) {
@Nullable CloseableReference<Bitmap> 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);
}
}
}
@@ -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>) :
Postprocessor {
private val postprocessors: List<Postprocessor> = 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<Bitmap> {
var prevBitmap: CloseableReference<Bitmap>? = null
var nextBitmap: CloseableReference<Bitmap>? = 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>): Postprocessor? {
return when (postprocessors.size) {
0 -> null
1 -> postprocessors[0]
else -> MultiPostprocessor(postprocessors)
}
}
}
}