Skip to content
This repository was archived by the owner on Jun 16, 2026. It is now read-only.

Commit f7158df

Browse files
authored
Merge pull request #152 from SudoPlz/sudoplz/fresco-cache-in-rn-images-experiment
feat(react-image): add a hook to customize ImageRequestBuilder in ReactImageView
2 parents ba5c5af + 3758b67 commit f7158df

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
package com.facebook.react.views.image
9+
10+
import android.net.Uri
11+
import com.facebook.imagepipeline.request.ImageRequestBuilder
12+
13+
/**
14+
* Global hook for mutating [ImageRequestBuilder] instances created by [ReactImageView].
15+
*
16+
* This is a no-op unless a hook is registered via [setHook].
17+
*/
18+
public object ReactImageRequestBuilderHook {
19+
public fun interface Hook {
20+
public fun apply(sourceUri: Uri, imageRequestBuilder: ImageRequestBuilder)
21+
}
22+
23+
@Volatile private var hook: Hook? = null
24+
25+
@JvmStatic
26+
public fun setHook(newHook: Hook?) {
27+
hook = newHook
28+
}
29+
30+
@JvmStatic
31+
public fun clearHook() {
32+
hook = null
33+
}
34+
35+
internal fun apply(sourceUri: Uri, imageRequestBuilder: ImageRequestBuilder) {
36+
hook?.apply(sourceUri, imageRequestBuilder)
37+
}
38+
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@ public class ReactImageView(
482482
} else {
483483
imageRequestBuilder.setCacheChoice(ImageRequest.CacheChoice.DEFAULT);
484484
}
485+
ReactImageRequestBuilderHook.apply(uri, imageRequestBuilder)
485486

486487
val imageRequest: ImageRequest =
487488
ReactNetworkImageRequest.fromBuilderWithHeaders(imageRequestBuilder, headers, cacheControl)
@@ -518,6 +519,7 @@ public class ReactImageView(
518519
} else {
519520
cachedImageRequestBuilder.setCacheChoice(ImageRequest.CacheChoice.DEFAULT);
520521
}
522+
ReactImageRequestBuilderHook.apply(cachedSource.uri, cachedImageRequestBuilder)
521523

522524
val cachedImageRequest = cachedImageRequestBuilder.build()
523525
builder.setLowResImageRequest(cachedImageRequest)

0 commit comments

Comments
 (0)