Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kotlinify ImageLoadEvent #43778

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions packages/react-native/ReactAndroid/api/ReactAndroid.api
Original file line number Diff line number Diff line change
Expand Up @@ -5996,12 +5996,14 @@ 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;
Expand All @@ -6012,12 +6014,25 @@ public class com/facebook/react/views/image/ImageLoadEvent : com/facebook/react/
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")
}
}
}
Loading