@onekeyfe/react-native-image 3.0.105 → 3.0.107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/OneKeyImage.podspec +2 -1
  2. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyBlockieAvatar.kt +264 -0
  3. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyBlockieAvatarLoader.kt +173 -0
  4. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImage.kt +23 -11
  5. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageCache.kt +2 -1
  6. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageGlideRegistry.kt +11 -0
  7. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageModel.kt +1 -0
  8. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageReusableView.kt +5 -0
  9. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyTosUrl.kt +10 -11
  10. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyBlockieAvatarLoaderTest.kt +327 -0
  11. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyBlockieAvatarTest.kt +214 -0
  12. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyImageRequestSignatureTest.kt +10 -1
  13. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyTosUrlTest.kt +42 -10
  14. package/ios/OneKeyAvatarImageLoader.swift +217 -0
  15. package/ios/OneKeyBlockie.swift +126 -0
  16. package/ios/OneKeyImage.swift +14 -2
  17. package/ios/OneKeyImageCache.swift +11 -1
  18. package/ios/OneKeyImageCoderBridge.h +14 -0
  19. package/ios/OneKeyImageCoderBridge.m +25 -0
  20. package/ios/OneKeyImageRequestContext.swift +14 -15
  21. package/ios/OneKeyImageReusableView.swift +6 -1
  22. package/ios/OneKeyTosURL.swift +13 -14
  23. package/ios/tests/OneKeyAvatarImageTests.swift +49 -0
  24. package/ios/tests/OneKeyTosURLTests.swift +43 -3
  25. package/lib/module/index.js +3 -1
  26. package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.cpp +9 -0
  27. package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.hpp +2 -0
  28. package/lib/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.cpp +5 -0
  29. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt +6 -0
  30. package/lib/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.hpp +7 -0
  31. package/lib/nitrogen/generated/ios/c++/views/HybridOneKeyImageComponent.mm +6 -0
  32. package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageSpec.swift +1 -0
  33. package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageSpec_cxx.swift +24 -0
  34. package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.cpp +2 -0
  35. package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.hpp +2 -0
  36. package/lib/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.cpp +2 -0
  37. package/lib/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.hpp +3 -0
  38. package/lib/nitrogen/generated/shared/json/OneKeyImageConfig.json +1 -0
  39. package/lib/typescript/src/OneKeyImage.nitro.d.ts +2 -0
  40. package/lib/typescript/src/index.d.ts +1 -1
  41. package/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.cpp +9 -0
  42. package/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.hpp +2 -0
  43. package/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.cpp +5 -0
  44. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt +6 -0
  45. package/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.hpp +7 -0
  46. package/nitrogen/generated/ios/c++/views/HybridOneKeyImageComponent.mm +6 -0
  47. package/nitrogen/generated/ios/swift/HybridOneKeyImageSpec.swift +1 -0
  48. package/nitrogen/generated/ios/swift/HybridOneKeyImageSpec_cxx.swift +24 -0
  49. package/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.cpp +2 -0
  50. package/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.hpp +2 -0
  51. package/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.cpp +2 -0
  52. package/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.hpp +3 -0
  53. package/nitrogen/generated/shared/json/OneKeyImageConfig.json +1 -0
  54. package/package.json +2 -2
  55. package/src/OneKeyImage.nitro.ts +2 -0
  56. package/src/index.tsx +3 -1
@@ -3,6 +3,46 @@ import XCTest
3
3
  @testable import OneKeyImage
4
4
 
5
5
  final class OneKeyTosURLTests: XCTestCase {
6
+ func testCommonIconsShareRenditionsAfterApplyingScreenDensity() throws {
7
+ let raw = try XCTUnwrap(URL(string: "https://common.onekey-asset.com/token.png"))
8
+ for size: CGFloat in [32, 40, 48] {
9
+ for scale: CGFloat in [1, 2, 2.625, 3] {
10
+ let result = OneKeyTosURL.optimized(
11
+ rawURL: raw, displaySize: size, scale: scale, overscan: 1.1, hasCustomIdentity: false
12
+ )
13
+ let width = scale <= 2 ? 96 : 160
14
+ XCTAssertEqual(result.absoluteString, "\(raw.absoluteString)?x-tos-process=image%2Fresize%2Cw_\(width)")
15
+ }
16
+ }
17
+ for (size, standard, highDensity): (CGFloat, Int, Int) in [
18
+ (48, 96, 160), (48.1, 192, 320), (96, 192, 320),
19
+ (96.1, 384, 640), (192, 384, 640), (192.1, 768, 1280),
20
+ (384, 768, 1280), (384.1, 1280, 1280),
21
+ ] {
22
+ for (scale, width): (CGFloat, Int) in [(2, standard), (2.625, highDensity)] {
23
+ let result = OneKeyTosURL.optimized(
24
+ rawURL: raw, displaySize: size, scale: scale, overscan: 1.1, hasCustomIdentity: false
25
+ )
26
+ XCTAssertTrue(result.absoluteString.hasSuffix("w_\(width)"))
27
+ }
28
+ }
29
+ let overscanned = OneKeyTosURL.optimized(
30
+ rawURL: raw, displaySize: 48, scale: 2, overscan: 2, hasCustomIdentity: false
31
+ )
32
+ XCTAssertTrue(overscanned.absoluteString.hasSuffix("w_160"))
33
+ }
34
+
35
+ func testPreservesSourceQueryAndFragment() throws {
36
+ let raw = try XCTUnwrap(URL(string: "https://common.onekey-asset.com/token.png?foo=a%20b#preview"))
37
+ let result = OneKeyTosURL.optimized(
38
+ rawURL: raw, displaySize: 32, scale: 3, overscan: 1.1, hasCustomIdentity: false
39
+ )
40
+ XCTAssertEqual(
41
+ result.absoluteString,
42
+ "https://common.onekey-asset.com/token.png?foo=a%20b&x-tos-process=image%2Fresize%2Cw_160#preview"
43
+ )
44
+ }
45
+
6
46
  func testOptimizesAllowedOneKeyAssetURL() throws {
7
47
  let raw = try XCTUnwrap(URL(string: "https://common.onekey-asset.com/tokens/btc.png"))
8
48
  let result = OneKeyTosURL.optimized(
@@ -13,7 +53,7 @@ final class OneKeyTosURLTests: XCTestCase {
13
53
  hasCustomIdentity: false
14
54
  )
15
55
  XCTAssertTrue(result.absoluteString.contains("x-tos-process="))
16
- XCTAssertTrue(result.absoluteString.contains("w_256"))
56
+ XCTAssertTrue(result.absoluteString.contains("w_384"))
17
57
  }
18
58
 
19
59
  func testDoesNotRewriteSignedOrCustomIdentityURL() throws {
@@ -84,7 +124,7 @@ final class OneKeyTosURLTests: XCTestCase {
84
124
  overscan: 1.1,
85
125
  hasCustomIdentity: false
86
126
  )
87
- XCTAssertTrue(result.absoluteString.contains("w_480"))
127
+ XCTAssertTrue(result.absoluteString.contains("w_640"))
88
128
  }
89
129
  }
90
130
 
@@ -97,7 +137,7 @@ final class OneKeyTosURLTests: XCTestCase {
97
137
  overscan: .infinity,
98
138
  hasCustomIdentity: false
99
139
  )
100
- XCTAssertTrue(result.absoluteString.contains("w_128"))
140
+ XCTAssertTrue(result.absoluteString.contains("w_384"))
101
141
  XCTAssertEqual(
102
142
  OneKeyTosURL.optimized(
103
143
  rawURL: raw,
@@ -44,6 +44,7 @@ export function OneKeyImage({
44
44
  autoplay,
45
45
  recyclingKey,
46
46
  optimizeTos = true,
47
+ resizeWidth,
47
48
  overscan = 1.1,
48
49
  loadingStrategy = OneKeyImageLoadingStrategy.STATIC,
49
50
  hybridRef,
@@ -57,7 +58,7 @@ export function OneKeyImage({
57
58
  }) {
58
59
  const normalized = useMemo(() => normalizeSource(source), [source]);
59
60
  const resolvedCachePolicy = cachePolicy ?? normalized?.cachePolicy ?? OneKeyImageCachePolicy.MEMORY_DISK;
60
- const identity = `${normalized?.uri ?? ''}|${JSON.stringify(normalized?.headers ?? {})}|${resolvedCachePolicy}|${recyclingKey ?? ''}|${contentFit}|${optimizeTos ? '1' : '0'}|${overscan}`;
61
+ const identity = `${normalized?.uri ?? ''}|${JSON.stringify(normalized?.headers ?? {})}|${resolvedCachePolicy}|${recyclingKey ?? ''}|${contentFit}|${optimizeTos ? '1' : '0'}|${resizeWidth ?? ''}|${overscan}`;
61
62
  const hasSource = normalized != null;
62
63
  const hasOverlay = placeholder != null || fallback != null;
63
64
  const [loadState, setLoadState] = useState({
@@ -183,6 +184,7 @@ export function OneKeyImage({
183
184
  autoplay: autoplay ?? Platform.OS !== 'android',
184
185
  recyclingKey,
185
186
  optimizeTos,
187
+ resizeWidth,
186
188
  overscan,
187
189
  loadingStrategy: placeholder == null ? loadingStrategy : OneKeyImageLoadingStrategy.NONE
188
190
  });
@@ -138,6 +138,15 @@ namespace margelo::nitro::onekeyimage {
138
138
  static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JBoolean> /* optimizeTos */)>("setOptimizeTos");
139
139
  method(_javaPart, optimizeTos.has_value() ? jni::JBoolean::valueOf(optimizeTos.value()) : nullptr);
140
140
  }
141
+ std::optional<double> JHybridOneKeyImageSpec::getResizeWidth() {
142
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JDouble>()>("getResizeWidth");
143
+ auto __result = method(_javaPart);
144
+ return __result != nullptr ? std::make_optional(__result->value()) : std::nullopt;
145
+ }
146
+ void JHybridOneKeyImageSpec::setResizeWidth(std::optional<double> resizeWidth) {
147
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JDouble> /* resizeWidth */)>("setResizeWidth");
148
+ method(_javaPart, resizeWidth.has_value() ? jni::JDouble::valueOf(resizeWidth.value()) : nullptr);
149
+ }
141
150
  std::optional<double> JHybridOneKeyImageSpec::getOverscan() {
142
151
  static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JDouble>()>("getOverscan");
143
152
  auto __result = method(_javaPart);
@@ -66,6 +66,8 @@ namespace margelo::nitro::onekeyimage {
66
66
  void setRecyclingKey(const std::optional<std::string>& recyclingKey) override;
67
67
  std::optional<bool> getOptimizeTos() override;
68
68
  void setOptimizeTos(std::optional<bool> optimizeTos) override;
69
+ std::optional<double> getResizeWidth() override;
70
+ void setResizeWidth(std::optional<double> resizeWidth) override;
69
71
  std::optional<double> getOverscan() override;
70
72
  void setOverscan(std::optional<double> overscan) override;
71
73
  std::optional<OneKeyImageLoadingStrategy> getLoadingStrategy() override;
@@ -93,6 +93,11 @@ void JHybridOneKeyImageStateUpdater::updateViewProps(jni::alias_ref<jni::JClass>
93
93
  : !newProps->optimizeTos.hasSameValue(oldProps->optimizeTos)) {
94
94
  hybridView->setOptimizeTos(newProps->optimizeTos.get());
95
95
  }
96
+ if (oldProps == nullptr
97
+ ? newProps->resizeWidth.isProvided()
98
+ : !newProps->resizeWidth.hasSameValue(oldProps->resizeWidth)) {
99
+ hybridView->setResizeWidth(newProps->resizeWidth.get());
100
+ }
96
101
  if (oldProps == nullptr
97
102
  ? newProps->overscan.isProvided()
98
103
  : !newProps->overscan.hasSameValue(oldProps->overscan)) {
@@ -75,6 +75,12 @@ abstract class HybridOneKeyImageSpec: HybridView() {
75
75
  @set:Keep
76
76
  abstract var optimizeTos: Boolean?
77
77
 
78
+ @get:DoNotStrip
79
+ @get:Keep
80
+ @set:DoNotStrip
81
+ @set:Keep
82
+ abstract var resizeWidth: Double?
83
+
78
84
  @get:DoNotStrip
79
85
  @get:Keep
80
86
  @set:DoNotStrip
@@ -134,6 +134,13 @@ namespace margelo::nitro::onekeyimage {
134
134
  inline void setOptimizeTos(std::optional<bool> optimizeTos) noexcept override {
135
135
  _swiftPart.setOptimizeTos(optimizeTos);
136
136
  }
137
+ inline std::optional<double> getResizeWidth() noexcept override {
138
+ auto __result = _swiftPart.getResizeWidth();
139
+ return __result;
140
+ }
141
+ inline void setResizeWidth(std::optional<double> resizeWidth) noexcept override {
142
+ _swiftPart.setResizeWidth(resizeWidth);
143
+ }
137
144
  inline std::optional<double> getOverscan() noexcept override {
138
145
  auto __result = _swiftPart.getOverscan();
139
146
  return __result;
@@ -146,6 +146,12 @@ using namespace margelo::nitro::onekeyimage::views;
146
146
  : !newViewProps.optimizeTos.hasSameValue(oldViewProps->optimizeTos)) {
147
147
  swiftPart.setOptimizeTos(newViewProps.optimizeTos.get());
148
148
  }
149
+ // resizeWidth: optional
150
+ if (oldViewProps == nullptr
151
+ ? newViewProps.resizeWidth.isProvided()
152
+ : !newViewProps.resizeWidth.hasSameValue(oldViewProps->resizeWidth)) {
153
+ swiftPart.setResizeWidth(newViewProps.resizeWidth.get());
154
+ }
149
155
  // overscan: optional
150
156
  if (oldViewProps == nullptr
151
157
  ? newViewProps.overscan.isProvided()
@@ -18,6 +18,7 @@ public protocol HybridOneKeyImageSpec_protocol: HybridObject, HybridView {
18
18
  var autoplay: Bool? { get set }
19
19
  var recyclingKey: String? { get set }
20
20
  var optimizeTos: Bool? { get set }
21
+ var resizeWidth: Double? { get set }
21
22
  var overscan: Double? { get set }
22
23
  var loadingStrategy: OneKeyImageLoadingStrategy? { get set }
23
24
  var onLoadStart: (() -> Void)? { get set }
@@ -292,6 +292,30 @@ open class HybridOneKeyImageSpec_cxx {
292
292
  }
293
293
  }
294
294
 
295
+ public final var resizeWidth: bridge.std__optional_double_ {
296
+ @inline(__always)
297
+ get {
298
+ return { () -> bridge.std__optional_double_ in
299
+ if let __unwrappedValue = self.__implementation.resizeWidth {
300
+ return bridge.create_std__optional_double_(__unwrappedValue)
301
+ } else {
302
+ return .init()
303
+ }
304
+ }()
305
+ }
306
+ @inline(__always)
307
+ set {
308
+ self.__implementation.resizeWidth = { () -> Double? in
309
+ if bridge.has_value_std__optional_double_(newValue) {
310
+ let __unwrapped = bridge.get_std__optional_double_(newValue)
311
+ return __unwrapped
312
+ } else {
313
+ return nil
314
+ }
315
+ }()
316
+ }
317
+ }
318
+
295
319
  public final var overscan: bridge.std__optional_double_ {
296
320
  @inline(__always)
297
321
  get {
@@ -30,6 +30,8 @@ namespace margelo::nitro::onekeyimage {
30
30
  prototype.registerHybridSetter("recyclingKey", &HybridOneKeyImageSpec::setRecyclingKey);
31
31
  prototype.registerHybridGetter("optimizeTos", &HybridOneKeyImageSpec::getOptimizeTos);
32
32
  prototype.registerHybridSetter("optimizeTos", &HybridOneKeyImageSpec::setOptimizeTos);
33
+ prototype.registerHybridGetter("resizeWidth", &HybridOneKeyImageSpec::getResizeWidth);
34
+ prototype.registerHybridSetter("resizeWidth", &HybridOneKeyImageSpec::setResizeWidth);
33
35
  prototype.registerHybridGetter("overscan", &HybridOneKeyImageSpec::getOverscan);
34
36
  prototype.registerHybridSetter("overscan", &HybridOneKeyImageSpec::setOverscan);
35
37
  prototype.registerHybridGetter("loadingStrategy", &HybridOneKeyImageSpec::getLoadingStrategy);
@@ -76,6 +76,8 @@ namespace margelo::nitro::onekeyimage {
76
76
  virtual void setRecyclingKey(const std::optional<std::string>& recyclingKey) = 0;
77
77
  virtual std::optional<bool> getOptimizeTos() = 0;
78
78
  virtual void setOptimizeTos(std::optional<bool> optimizeTos) = 0;
79
+ virtual std::optional<double> getResizeWidth() = 0;
80
+ virtual void setResizeWidth(std::optional<double> resizeWidth) = 0;
79
81
  virtual std::optional<double> getOverscan() = 0;
80
82
  virtual void setOverscan(std::optional<double> overscan) = 0;
81
83
  virtual std::optional<OneKeyImageLoadingStrategy> getLoadingStrategy() = 0;
@@ -28,6 +28,7 @@ namespace margelo::nitro::onekeyimage::views {
28
28
  autoplay(nitro::ReactProp<std::optional<bool>>::fromRawValue("OneKeyImage", "autoplay", rawProps, sourceProps.autoplay)),
29
29
  recyclingKey(nitro::ReactProp<std::optional<std::string>>::fromRawValue("OneKeyImage", "recyclingKey", rawProps, sourceProps.recyclingKey)),
30
30
  optimizeTos(nitro::ReactProp<std::optional<bool>>::fromRawValue("OneKeyImage", "optimizeTos", rawProps, sourceProps.optimizeTos)),
31
+ resizeWidth(nitro::ReactProp<std::optional<double>>::fromRawValue("OneKeyImage", "resizeWidth", rawProps, sourceProps.resizeWidth)),
31
32
  overscan(nitro::ReactProp<std::optional<double>>::fromRawValue("OneKeyImage", "overscan", rawProps, sourceProps.overscan)),
32
33
  loadingStrategy(nitro::ReactProp<std::optional<OneKeyImageLoadingStrategy>>::fromRawValue("OneKeyImage", "loadingStrategy", rawProps, sourceProps.loadingStrategy)),
33
34
  onLoadStart(nitro::ReactProp<std::optional<std::function<void()>>>::fromRawValue("OneKeyImage", "onLoadStart", rawProps, sourceProps.onLoadStart)),
@@ -47,6 +48,7 @@ namespace margelo::nitro::onekeyimage::views {
47
48
  case hashString("autoplay"): return true;
48
49
  case hashString("recyclingKey"): return true;
49
50
  case hashString("optimizeTos"): return true;
51
+ case hashString("resizeWidth"): return true;
50
52
  case hashString("overscan"): return true;
51
53
  case hashString("loadingStrategy"): return true;
52
54
  case hashString("onLoadStart"): return true;
@@ -56,6 +56,7 @@ namespace margelo::nitro::onekeyimage::views {
56
56
  nitro::ReactProp<std::optional<bool>> autoplay;
57
57
  nitro::ReactProp<std::optional<std::string>> recyclingKey;
58
58
  nitro::ReactProp<std::optional<bool>> optimizeTos;
59
+ nitro::ReactProp<std::optional<double>> resizeWidth;
59
60
  nitro::ReactProp<std::optional<double>> overscan;
60
61
  nitro::ReactProp<std::optional<OneKeyImageLoadingStrategy>> loadingStrategy;
61
62
  nitro::ReactProp<std::optional<std::function<void()>>> onLoadStart;
@@ -75,6 +76,7 @@ namespace margelo::nitro::onekeyimage::views {
75
76
  autoplay.hasSameValue(other.autoplay) &&
76
77
  recyclingKey.hasSameValue(other.recyclingKey) &&
77
78
  optimizeTos.hasSameValue(other.optimizeTos) &&
79
+ resizeWidth.hasSameValue(other.resizeWidth) &&
78
80
  overscan.hasSameValue(other.overscan) &&
79
81
  loadingStrategy.hasSameValue(other.loadingStrategy) &&
80
82
  onLoadStart.hasSameValue(other.onLoadStart) &&
@@ -95,6 +97,7 @@ namespace margelo::nitro::onekeyimage::views {
95
97
  autoplay.isProvided() ||
96
98
  recyclingKey.isProvided() ||
97
99
  optimizeTos.isProvided() ||
100
+ resizeWidth.isProvided() ||
98
101
  overscan.isProvided() ||
99
102
  loadingStrategy.isProvided() ||
100
103
  onLoadStart.isProvided() ||
@@ -12,6 +12,7 @@
12
12
  "autoplay": true,
13
13
  "recyclingKey": true,
14
14
  "optimizeTos": true,
15
+ "resizeWidth": true,
15
16
  "overscan": true,
16
17
  "loadingStrategy": true,
17
18
  "onLoadStart": true,
@@ -32,6 +32,8 @@ export interface OneKeyImageNativeProps extends HybridViewProps {
32
32
  autoplay?: boolean;
33
33
  recyclingKey?: string;
34
34
  optimizeTos?: boolean;
35
+ /** Display width hint in layout units. Native applies the screen density. */
36
+ resizeWidth?: number;
35
37
  overscan?: number;
36
38
  loadingStrategy?: OneKeyImageLoadingStrategy;
37
39
  onLoadStart?: () => void;
@@ -45,7 +45,7 @@ export interface OneKeyImageProps extends Omit<OneKeyImageNativeProps, 'sourceUr
45
45
  onError?: MaybeWrappedCallback<(event: OneKeyImageErrorEvent) => void>;
46
46
  onLoadEnd?: MaybeWrappedCallback<() => void>;
47
47
  }
48
- export declare function OneKeyImage({ source, placeholder, fallback, variant, contentFit, cachePolicy, autoplay, recyclingKey, optimizeTos, overscan, loadingStrategy, hybridRef, onLoadStart, onLoad, onDisplay, onError, onLoadEnd, style, ...viewProps }: OneKeyImageProps): import("react/jsx-runtime").JSX.Element;
48
+ export declare function OneKeyImage({ source, placeholder, fallback, variant, contentFit, cachePolicy, autoplay, recyclingKey, optimizeTos, resizeWidth, overscan, loadingStrategy, hybridRef, onLoadStart, onLoad, onDisplay, onError, onLoadEnd, style, ...viewProps }: OneKeyImageProps): import("react/jsx-runtime").JSX.Element;
49
49
  export declare const OneKeyImageCache: {
50
50
  preload(sources: OneKeyImagePreloadInput[]): Promise<boolean>;
51
51
  clearMemory: () => Promise<void>;
@@ -138,6 +138,15 @@ namespace margelo::nitro::onekeyimage {
138
138
  static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JBoolean> /* optimizeTos */)>("setOptimizeTos");
139
139
  method(_javaPart, optimizeTos.has_value() ? jni::JBoolean::valueOf(optimizeTos.value()) : nullptr);
140
140
  }
141
+ std::optional<double> JHybridOneKeyImageSpec::getResizeWidth() {
142
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JDouble>()>("getResizeWidth");
143
+ auto __result = method(_javaPart);
144
+ return __result != nullptr ? std::make_optional(__result->value()) : std::nullopt;
145
+ }
146
+ void JHybridOneKeyImageSpec::setResizeWidth(std::optional<double> resizeWidth) {
147
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JDouble> /* resizeWidth */)>("setResizeWidth");
148
+ method(_javaPart, resizeWidth.has_value() ? jni::JDouble::valueOf(resizeWidth.value()) : nullptr);
149
+ }
141
150
  std::optional<double> JHybridOneKeyImageSpec::getOverscan() {
142
151
  static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JDouble>()>("getOverscan");
143
152
  auto __result = method(_javaPart);
@@ -66,6 +66,8 @@ namespace margelo::nitro::onekeyimage {
66
66
  void setRecyclingKey(const std::optional<std::string>& recyclingKey) override;
67
67
  std::optional<bool> getOptimizeTos() override;
68
68
  void setOptimizeTos(std::optional<bool> optimizeTos) override;
69
+ std::optional<double> getResizeWidth() override;
70
+ void setResizeWidth(std::optional<double> resizeWidth) override;
69
71
  std::optional<double> getOverscan() override;
70
72
  void setOverscan(std::optional<double> overscan) override;
71
73
  std::optional<OneKeyImageLoadingStrategy> getLoadingStrategy() override;
@@ -93,6 +93,11 @@ void JHybridOneKeyImageStateUpdater::updateViewProps(jni::alias_ref<jni::JClass>
93
93
  : !newProps->optimizeTos.hasSameValue(oldProps->optimizeTos)) {
94
94
  hybridView->setOptimizeTos(newProps->optimizeTos.get());
95
95
  }
96
+ if (oldProps == nullptr
97
+ ? newProps->resizeWidth.isProvided()
98
+ : !newProps->resizeWidth.hasSameValue(oldProps->resizeWidth)) {
99
+ hybridView->setResizeWidth(newProps->resizeWidth.get());
100
+ }
96
101
  if (oldProps == nullptr
97
102
  ? newProps->overscan.isProvided()
98
103
  : !newProps->overscan.hasSameValue(oldProps->overscan)) {
@@ -75,6 +75,12 @@ abstract class HybridOneKeyImageSpec: HybridView() {
75
75
  @set:Keep
76
76
  abstract var optimizeTos: Boolean?
77
77
 
78
+ @get:DoNotStrip
79
+ @get:Keep
80
+ @set:DoNotStrip
81
+ @set:Keep
82
+ abstract var resizeWidth: Double?
83
+
78
84
  @get:DoNotStrip
79
85
  @get:Keep
80
86
  @set:DoNotStrip
@@ -134,6 +134,13 @@ namespace margelo::nitro::onekeyimage {
134
134
  inline void setOptimizeTos(std::optional<bool> optimizeTos) noexcept override {
135
135
  _swiftPart.setOptimizeTos(optimizeTos);
136
136
  }
137
+ inline std::optional<double> getResizeWidth() noexcept override {
138
+ auto __result = _swiftPart.getResizeWidth();
139
+ return __result;
140
+ }
141
+ inline void setResizeWidth(std::optional<double> resizeWidth) noexcept override {
142
+ _swiftPart.setResizeWidth(resizeWidth);
143
+ }
137
144
  inline std::optional<double> getOverscan() noexcept override {
138
145
  auto __result = _swiftPart.getOverscan();
139
146
  return __result;
@@ -146,6 +146,12 @@ using namespace margelo::nitro::onekeyimage::views;
146
146
  : !newViewProps.optimizeTos.hasSameValue(oldViewProps->optimizeTos)) {
147
147
  swiftPart.setOptimizeTos(newViewProps.optimizeTos.get());
148
148
  }
149
+ // resizeWidth: optional
150
+ if (oldViewProps == nullptr
151
+ ? newViewProps.resizeWidth.isProvided()
152
+ : !newViewProps.resizeWidth.hasSameValue(oldViewProps->resizeWidth)) {
153
+ swiftPart.setResizeWidth(newViewProps.resizeWidth.get());
154
+ }
149
155
  // overscan: optional
150
156
  if (oldViewProps == nullptr
151
157
  ? newViewProps.overscan.isProvided()
@@ -18,6 +18,7 @@ public protocol HybridOneKeyImageSpec_protocol: HybridObject, HybridView {
18
18
  var autoplay: Bool? { get set }
19
19
  var recyclingKey: String? { get set }
20
20
  var optimizeTos: Bool? { get set }
21
+ var resizeWidth: Double? { get set }
21
22
  var overscan: Double? { get set }
22
23
  var loadingStrategy: OneKeyImageLoadingStrategy? { get set }
23
24
  var onLoadStart: (() -> Void)? { get set }
@@ -292,6 +292,30 @@ open class HybridOneKeyImageSpec_cxx {
292
292
  }
293
293
  }
294
294
 
295
+ public final var resizeWidth: bridge.std__optional_double_ {
296
+ @inline(__always)
297
+ get {
298
+ return { () -> bridge.std__optional_double_ in
299
+ if let __unwrappedValue = self.__implementation.resizeWidth {
300
+ return bridge.create_std__optional_double_(__unwrappedValue)
301
+ } else {
302
+ return .init()
303
+ }
304
+ }()
305
+ }
306
+ @inline(__always)
307
+ set {
308
+ self.__implementation.resizeWidth = { () -> Double? in
309
+ if bridge.has_value_std__optional_double_(newValue) {
310
+ let __unwrapped = bridge.get_std__optional_double_(newValue)
311
+ return __unwrapped
312
+ } else {
313
+ return nil
314
+ }
315
+ }()
316
+ }
317
+ }
318
+
295
319
  public final var overscan: bridge.std__optional_double_ {
296
320
  @inline(__always)
297
321
  get {
@@ -30,6 +30,8 @@ namespace margelo::nitro::onekeyimage {
30
30
  prototype.registerHybridSetter("recyclingKey", &HybridOneKeyImageSpec::setRecyclingKey);
31
31
  prototype.registerHybridGetter("optimizeTos", &HybridOneKeyImageSpec::getOptimizeTos);
32
32
  prototype.registerHybridSetter("optimizeTos", &HybridOneKeyImageSpec::setOptimizeTos);
33
+ prototype.registerHybridGetter("resizeWidth", &HybridOneKeyImageSpec::getResizeWidth);
34
+ prototype.registerHybridSetter("resizeWidth", &HybridOneKeyImageSpec::setResizeWidth);
33
35
  prototype.registerHybridGetter("overscan", &HybridOneKeyImageSpec::getOverscan);
34
36
  prototype.registerHybridSetter("overscan", &HybridOneKeyImageSpec::setOverscan);
35
37
  prototype.registerHybridGetter("loadingStrategy", &HybridOneKeyImageSpec::getLoadingStrategy);
@@ -76,6 +76,8 @@ namespace margelo::nitro::onekeyimage {
76
76
  virtual void setRecyclingKey(const std::optional<std::string>& recyclingKey) = 0;
77
77
  virtual std::optional<bool> getOptimizeTos() = 0;
78
78
  virtual void setOptimizeTos(std::optional<bool> optimizeTos) = 0;
79
+ virtual std::optional<double> getResizeWidth() = 0;
80
+ virtual void setResizeWidth(std::optional<double> resizeWidth) = 0;
79
81
  virtual std::optional<double> getOverscan() = 0;
80
82
  virtual void setOverscan(std::optional<double> overscan) = 0;
81
83
  virtual std::optional<OneKeyImageLoadingStrategy> getLoadingStrategy() = 0;
@@ -28,6 +28,7 @@ namespace margelo::nitro::onekeyimage::views {
28
28
  autoplay(nitro::ReactProp<std::optional<bool>>::fromRawValue("OneKeyImage", "autoplay", rawProps, sourceProps.autoplay)),
29
29
  recyclingKey(nitro::ReactProp<std::optional<std::string>>::fromRawValue("OneKeyImage", "recyclingKey", rawProps, sourceProps.recyclingKey)),
30
30
  optimizeTos(nitro::ReactProp<std::optional<bool>>::fromRawValue("OneKeyImage", "optimizeTos", rawProps, sourceProps.optimizeTos)),
31
+ resizeWidth(nitro::ReactProp<std::optional<double>>::fromRawValue("OneKeyImage", "resizeWidth", rawProps, sourceProps.resizeWidth)),
31
32
  overscan(nitro::ReactProp<std::optional<double>>::fromRawValue("OneKeyImage", "overscan", rawProps, sourceProps.overscan)),
32
33
  loadingStrategy(nitro::ReactProp<std::optional<OneKeyImageLoadingStrategy>>::fromRawValue("OneKeyImage", "loadingStrategy", rawProps, sourceProps.loadingStrategy)),
33
34
  onLoadStart(nitro::ReactProp<std::optional<std::function<void()>>>::fromRawValue("OneKeyImage", "onLoadStart", rawProps, sourceProps.onLoadStart)),
@@ -47,6 +48,7 @@ namespace margelo::nitro::onekeyimage::views {
47
48
  case hashString("autoplay"): return true;
48
49
  case hashString("recyclingKey"): return true;
49
50
  case hashString("optimizeTos"): return true;
51
+ case hashString("resizeWidth"): return true;
50
52
  case hashString("overscan"): return true;
51
53
  case hashString("loadingStrategy"): return true;
52
54
  case hashString("onLoadStart"): return true;
@@ -56,6 +56,7 @@ namespace margelo::nitro::onekeyimage::views {
56
56
  nitro::ReactProp<std::optional<bool>> autoplay;
57
57
  nitro::ReactProp<std::optional<std::string>> recyclingKey;
58
58
  nitro::ReactProp<std::optional<bool>> optimizeTos;
59
+ nitro::ReactProp<std::optional<double>> resizeWidth;
59
60
  nitro::ReactProp<std::optional<double>> overscan;
60
61
  nitro::ReactProp<std::optional<OneKeyImageLoadingStrategy>> loadingStrategy;
61
62
  nitro::ReactProp<std::optional<std::function<void()>>> onLoadStart;
@@ -75,6 +76,7 @@ namespace margelo::nitro::onekeyimage::views {
75
76
  autoplay.hasSameValue(other.autoplay) &&
76
77
  recyclingKey.hasSameValue(other.recyclingKey) &&
77
78
  optimizeTos.hasSameValue(other.optimizeTos) &&
79
+ resizeWidth.hasSameValue(other.resizeWidth) &&
78
80
  overscan.hasSameValue(other.overscan) &&
79
81
  loadingStrategy.hasSameValue(other.loadingStrategy) &&
80
82
  onLoadStart.hasSameValue(other.onLoadStart) &&
@@ -95,6 +97,7 @@ namespace margelo::nitro::onekeyimage::views {
95
97
  autoplay.isProvided() ||
96
98
  recyclingKey.isProvided() ||
97
99
  optimizeTos.isProvided() ||
100
+ resizeWidth.isProvided() ||
98
101
  overscan.isProvided() ||
99
102
  loadingStrategy.isProvided() ||
100
103
  onLoadStart.isProvided() ||
@@ -12,6 +12,7 @@
12
12
  "autoplay": true,
13
13
  "recyclingKey": true,
14
14
  "optimizeTos": true,
15
+ "resizeWidth": true,
15
16
  "overscan": true,
16
17
  "loadingStrategy": true,
17
18
  "onLoadStart": true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/react-native-image",
3
- "version": "3.0.105",
3
+ "version": "3.0.107",
4
4
  "description": "High-performance native image view for OneKey",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -81,7 +81,7 @@
81
81
  "typescript": "^5.9.2"
82
82
  },
83
83
  "peerDependencies": {
84
- "@onekeyfe/react-native-skeleton": "3.0.105",
84
+ "@onekeyfe/react-native-skeleton": "3.0.107",
85
85
  "react": "*",
86
86
  "react-native": "*",
87
87
  "react-native-nitro-modules": "0.37.0"
@@ -43,6 +43,8 @@ export interface OneKeyImageNativeProps extends HybridViewProps {
43
43
  autoplay?: boolean;
44
44
  recyclingKey?: string;
45
45
  optimizeTos?: boolean;
46
+ /** Display width hint in layout units. Native applies the screen density. */
47
+ resizeWidth?: number;
46
48
  overscan?: number;
47
49
  loadingStrategy?: OneKeyImageLoadingStrategy;
48
50
  onLoadStart?: () => void;
package/src/index.tsx CHANGED
@@ -153,6 +153,7 @@ export function OneKeyImage({
153
153
  autoplay,
154
154
  recyclingKey,
155
155
  optimizeTos = true,
156
+ resizeWidth,
156
157
  overscan = 1.1,
157
158
  loadingStrategy = OneKeyImageLoadingStrategy.STATIC,
158
159
  hybridRef,
@@ -173,7 +174,7 @@ export function OneKeyImage({
173
174
  normalized?.headers ?? {}
174
175
  )}|${resolvedCachePolicy}|${recyclingKey ?? ''}|${contentFit}|${
175
176
  optimizeTos ? '1' : '0'
176
- }|${overscan}`;
177
+ }|${resizeWidth ?? ''}|${overscan}`;
177
178
  const hasSource = normalized != null;
178
179
  const hasOverlay = placeholder != null || fallback != null;
179
180
  type LoadState = {
@@ -338,6 +339,7 @@ export function OneKeyImage({
338
339
  autoplay: autoplay ?? Platform.OS !== 'android',
339
340
  recyclingKey,
340
341
  optimizeTos,
342
+ resizeWidth,
341
343
  overscan,
342
344
  loadingStrategy:
343
345
  placeholder == null ? loadingStrategy : OneKeyImageLoadingStrategy.NONE,