Skip to content

Commit

Permalink
Kotlinify ImageLoadEvent (facebook#43778)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: facebook#43778

## Changelog:
[Internal] -

As in the title.

Reviewed By: cortinico

Differential Revision: D55640524
  • Loading branch information
rshest authored and facebook-github-bot committed Apr 3, 2024
1 parent ca5d940 commit 47f3e32
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 184 deletions.
26 changes: 18 additions & 8 deletions packages/react-native/ReactAndroid/api/ReactAndroid.api
Original file line number Diff line number Diff line change
Expand Up @@ -5988,28 +5988,38 @@ public abstract interface class com/facebook/react/views/image/GlobalImageLoadLi
public abstract fun onLoadAttempt (Landroid/net/Uri;)V
}

public class com/facebook/react/views/image/ImageLoadEvent : com/facebook/react/uimanager/events/Event {
public final class com/facebook/react/views/image/ImageLoadEvent : com/facebook/react/uimanager/events/Event {
public static final field Companion Lcom/facebook/react/views/image/ImageLoadEvent$Companion;
public static final field ON_ERROR I
public static final field ON_LOAD I
public static final field ON_LOAD_END I
public static final field ON_LOAD_START I
public static final field ON_PROGRESS I
public synthetic fun <init> (IIILjava/lang/String;Ljava/lang/String;IIIILkotlin/jvm/internal/DefaultConstructorMarker;)V
public static final fun createErrorEvent (IILjava/lang/Throwable;)Lcom/facebook/react/views/image/ImageLoadEvent;
public static final fun createErrorEvent (ILjava/lang/Throwable;)Lcom/facebook/react/views/image/ImageLoadEvent;
public static final fun createLoadEndEvent (I)Lcom/facebook/react/views/image/ImageLoadEvent;
public static final fun createLoadEndEvent (II)Lcom/facebook/react/views/image/ImageLoadEvent;
public static final fun createLoadEvent (IILjava/lang/String;II)Lcom/facebook/react/views/image/ImageLoadEvent;
public static final fun createLoadEvent (ILjava/lang/String;II)Lcom/facebook/react/views/image/ImageLoadEvent;
public static final fun createLoadStartEvent (I)Lcom/facebook/react/views/image/ImageLoadEvent;
public static final fun createLoadStartEvent (II)Lcom/facebook/react/views/image/ImageLoadEvent;
public static final fun createProgressEvent (IILjava/lang/String;II)Lcom/facebook/react/views/image/ImageLoadEvent;
public static final fun createProgressEvent (ILjava/lang/String;II)Lcom/facebook/react/views/image/ImageLoadEvent;
public static fun eventNameForType (I)Ljava/lang/String;
public static final fun eventNameForType (I)Ljava/lang/String;
public fun getCoalescingKey ()S
protected fun getEventData ()Lcom/facebook/react/bridge/WritableMap;
public fun getEventName ()Ljava/lang/String;
}

public final class com/facebook/react/views/image/ImageLoadEvent$Companion {
public final fun createErrorEvent (IILjava/lang/Throwable;)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun createErrorEvent (ILjava/lang/Throwable;)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun createLoadEndEvent (I)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun createLoadEndEvent (II)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun createLoadEvent (IILjava/lang/String;II)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun createLoadEvent (ILjava/lang/String;II)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun createLoadStartEvent (I)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun createLoadStartEvent (II)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun createProgressEvent (IILjava/lang/String;II)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun createProgressEvent (ILjava/lang/String;II)Lcom/facebook/react/views/image/ImageLoadEvent;
public final fun eventNameForType (I)Ljava/lang/String;
}

public final class com/facebook/react/views/image/ImageResizeMethod : java/lang/Enum {
public static final field AUTO Lcom/facebook/react/views/image/ImageResizeMethod;
public static final field RESIZE Lcom/facebook/react/views/image/ImageResizeMethod;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
/*
* 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 androidx.annotation.IntDef
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
import com.facebook.react.uimanager.common.ViewUtil
import com.facebook.react.uimanager.events.Event

public class ImageLoadEvent
private constructor(
surfaceId: Int,
viewId: Int,
@param:ImageEventType private val eventType: Int,
private val errorMessage: String? = null,
private val sourceUri: String? = null,
private val width: Int = 0,
private val height: Int = 0,
private val loaded: Int = 0,
private val total: Int = 0
) : Event<ImageLoadEvent>(surfaceId, viewId) {
@IntDef(ON_ERROR, ON_LOAD, ON_LOAD_END, ON_LOAD_START, ON_PROGRESS)
@Retention(AnnotationRetention.SOURCE)
internal annotation class ImageEventType

override fun getEventName(): String = eventNameForType(eventType)

// Intentionally casting eventType because it is guaranteed to be a short
// enough to fit into short.
override fun getCoalescingKey(): Short = eventType.toShort()

override fun getEventData(): WritableMap? =
Arguments.createMap().apply {
when (eventType) {
ON_PROGRESS -> {
putInt("loaded", loaded)
putInt("total", total)
}
ON_LOAD -> putMap("source", createEventDataSource())
ON_ERROR -> putString("error", errorMessage)
}
}

private fun createEventDataSource(): WritableMap =
Arguments.createMap().apply {
putString("uri", sourceUri)
putDouble("width", width.toDouble())
putDouble("height", height.toDouble())
}

public companion object {
public const val ON_ERROR: Int = 1
public const val ON_LOAD: Int = 2
public const val ON_LOAD_END: Int = 3
public const val ON_LOAD_START: Int = 4
public const val ON_PROGRESS: Int = 5

@Deprecated(
"Use the createLoadStartEvent version that explicitly takes surfaceId as an argument",
ReplaceWith("createLoadStartEvent(surfaceId, viewId)"))
@JvmStatic
public fun createLoadStartEvent(viewId: Int): ImageLoadEvent =
createLoadStartEvent(ViewUtil.NO_SURFACE_ID, viewId)

@Deprecated(
"Use the createProgressEvent version that explicitly takes surfaceId as an argument",
ReplaceWith("createProgressEvent(surfaceId, viewId, imageUri, loaded, total)"))
@JvmStatic
public fun createProgressEvent(
viewId: Int,
imageUri: String?,
loaded: Int,
total: Int
): ImageLoadEvent = createProgressEvent(ViewUtil.NO_SURFACE_ID, viewId, imageUri, loaded, total)

@Deprecated(
"Use the createLoadEvent version that explicitly takes surfaceId as an argument",
ReplaceWith("createLoadEvent(surfaceId, viewId, imageUri, width, height)"))
@JvmStatic
public fun createLoadEvent(
viewId: Int,
imageUri: String?,
width: Int,
height: Int
): ImageLoadEvent = createLoadEvent(ViewUtil.NO_SURFACE_ID, viewId, imageUri, width, height)

@Deprecated(
"Use the createErrorEvent version that explicitly takes surfaceId as an argument",
ReplaceWith("createErrorEvent(surfaceId, viewId, throwable)"))
@JvmStatic
public fun createErrorEvent(viewId: Int, throwable: Throwable): ImageLoadEvent =
createErrorEvent(ViewUtil.NO_SURFACE_ID, viewId, throwable)

@Deprecated(
"Use the createLoadEndEvent version that explicitly takes surfaceId as an argument",
ReplaceWith("createLoadEndEvent(surfaceId, viewId)"))
@JvmStatic
public fun createLoadEndEvent(viewId: Int): ImageLoadEvent =
createLoadEndEvent(ViewUtil.NO_SURFACE_ID, viewId)

@JvmStatic
public fun createLoadStartEvent(surfaceId: Int, viewId: Int): ImageLoadEvent =
ImageLoadEvent(surfaceId, viewId, ON_LOAD_START)

/**
* @param loaded Amount of the image that has been loaded. It should be number of bytes, but
* Fresco does not currently provides that information.
* @param total Amount that `loaded` will be when the image is fully loaded.
*/
@JvmStatic
public fun createProgressEvent(
surfaceId: Int,
viewId: Int,
imageUri: String?,
loaded: Int,
total: Int
): ImageLoadEvent =
ImageLoadEvent(surfaceId, viewId, ON_PROGRESS, null, imageUri, 0, 0, loaded, total)

@JvmStatic
public fun createLoadEvent(
surfaceId: Int,
viewId: Int,
imageUri: String?,
width: Int,
height: Int
): ImageLoadEvent =
ImageLoadEvent(surfaceId, viewId, ON_LOAD, null, imageUri, width, height, 0, 0)

@JvmStatic
public fun createErrorEvent(surfaceId: Int, viewId: Int, throwable: Throwable): ImageLoadEvent =
ImageLoadEvent(surfaceId, viewId, ON_ERROR, throwable.message, null, 0, 0, 0, 0)

@JvmStatic
public fun createLoadEndEvent(surfaceId: Int, viewId: Int): ImageLoadEvent =
ImageLoadEvent(surfaceId, viewId, ON_LOAD_END)

@JvmStatic
public fun eventNameForType(@ImageEventType eventType: Int): String =
when (eventType) {
ON_ERROR -> "topError"
ON_LOAD -> "topLoad"
ON_LOAD_END -> "topLoadEnd"
ON_LOAD_START -> "topLoadStart"
ON_PROGRESS -> "topProgress"
else -> error("Invalid image event: $eventType")
}
}
}

0 comments on commit 47f3e32

Please sign in to comment.