@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.
- package/OneKeyImage.podspec +2 -1
- package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyBlockieAvatar.kt +264 -0
- package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyBlockieAvatarLoader.kt +173 -0
- package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImage.kt +23 -11
- package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageCache.kt +2 -1
- package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageGlideRegistry.kt +11 -0
- package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageModel.kt +1 -0
- package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageReusableView.kt +5 -0
- package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyTosUrl.kt +10 -11
- package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyBlockieAvatarLoaderTest.kt +327 -0
- package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyBlockieAvatarTest.kt +214 -0
- package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyImageRequestSignatureTest.kt +10 -1
- package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyTosUrlTest.kt +42 -10
- package/ios/OneKeyAvatarImageLoader.swift +217 -0
- package/ios/OneKeyBlockie.swift +126 -0
- package/ios/OneKeyImage.swift +14 -2
- package/ios/OneKeyImageCache.swift +11 -1
- package/ios/OneKeyImageCoderBridge.h +14 -0
- package/ios/OneKeyImageCoderBridge.m +25 -0
- package/ios/OneKeyImageRequestContext.swift +14 -15
- package/ios/OneKeyImageReusableView.swift +6 -1
- package/ios/OneKeyTosURL.swift +13 -14
- package/ios/tests/OneKeyAvatarImageTests.swift +49 -0
- package/ios/tests/OneKeyTosURLTests.swift +43 -3
- package/lib/module/index.js +3 -1
- package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.cpp +9 -0
- package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.hpp +2 -0
- package/lib/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.cpp +5 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt +6 -0
- package/lib/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.hpp +7 -0
- package/lib/nitrogen/generated/ios/c++/views/HybridOneKeyImageComponent.mm +6 -0
- package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageSpec.swift +1 -0
- package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageSpec_cxx.swift +24 -0
- package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.cpp +2 -0
- package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.hpp +2 -0
- package/lib/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.cpp +2 -0
- package/lib/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.hpp +3 -0
- package/lib/nitrogen/generated/shared/json/OneKeyImageConfig.json +1 -0
- package/lib/typescript/src/OneKeyImage.nitro.d.ts +2 -0
- package/lib/typescript/src/index.d.ts +1 -1
- package/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.cpp +9 -0
- package/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.hpp +2 -0
- package/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.cpp +5 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt +6 -0
- package/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.hpp +7 -0
- package/nitrogen/generated/ios/c++/views/HybridOneKeyImageComponent.mm +6 -0
- package/nitrogen/generated/ios/swift/HybridOneKeyImageSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridOneKeyImageSpec_cxx.swift +24 -0
- package/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.hpp +2 -0
- package/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.cpp +2 -0
- package/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.hpp +3 -0
- package/nitrogen/generated/shared/json/OneKeyImageConfig.json +1 -0
- package/package.json +2 -2
- package/src/OneKeyImage.nitro.ts +2 -0
- 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("
|
|
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("
|
|
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("
|
|
140
|
+
XCTAssertTrue(result.absoluteString.contains("w_384"))
|
|
101
141
|
XCTAssertEqual(
|
|
102
142
|
OneKeyTosURL.optimized(
|
|
103
143
|
rawURL: raw,
|
package/lib/module/index.js
CHANGED
|
@@ -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)) {
|
package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt
CHANGED
|
@@ -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() ||
|
|
@@ -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)) {
|
package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt
CHANGED
|
@@ -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() ||
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/react-native-image",
|
|
3
|
-
"version": "3.0.
|
|
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.
|
|
84
|
+
"@onekeyfe/react-native-skeleton": "3.0.107",
|
|
85
85
|
"react": "*",
|
|
86
86
|
"react-native": "*",
|
|
87
87
|
"react-native-nitro-modules": "0.37.0"
|
package/src/OneKeyImage.nitro.ts
CHANGED
|
@@ -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,
|