@amazon-devices/expo-image 2.0.9000000000 → 3.0.0
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/CMakeLists.txt +80 -58
- package/README.kepler.md +1 -0
- package/build/ExpoImageModules.kepler.d.ts.map +1 -1
- package/build/ExpoImageModules.kepler.js +1 -1
- package/build/ExpoImageModules.kepler.js.map +1 -1
- package/build/ImageViewNativeComponent.js +1 -1
- package/build/ImageViewNativeComponent.js.map +1 -1
- package/kepler/AutoLinkInit.cpp +17 -0
- package/kepler/Constants.h +21 -0
- package/kepler/ExpoImage/ExpoImageTurboModule.cpp +148 -0
- package/kepler/ExpoImage/ExpoImageTurboModule.h +41 -0
- package/kepler/ExpoImage/PrefetchListener.cpp +45 -0
- package/kepler/ExpoImage/PrefetchListener.h +40 -0
- package/kepler/ExpoImageComponent/AccessibilityDelegate.cpp +33 -0
- package/kepler/ExpoImageComponent/AccessibilityDelegate.h +30 -0
- package/kepler/ExpoImageComponent/ExpoImageComponentViewManager.cpp +132 -0
- package/kepler/ExpoImageComponent/ExpoImageComponentViewManager.h +66 -0
- package/kepler/ExpoImageComponent/ExpoImageStore.h +102 -0
- package/kepler/ExpoImageComponent/ExpoImageView.cpp +556 -0
- package/kepler/ExpoImageComponent/ExpoImageView.h +186 -0
- package/kepler/ExpoImageComponent/HashImageDecoder.cpp +91 -0
- package/kepler/ExpoImageComponent/HashImageDecoder.h +18 -0
- package/kepler/ExpoImageComponent/ImageLoadListeners.cpp +73 -0
- package/kepler/ExpoImageComponent/ImageLoadListeners.h +52 -0
- package/kepler/ExpoImageComponent/TransitionAnimator.cpp +113 -0
- package/kepler/ExpoImageComponent/TransitionAnimator.h +32 -0
- package/kepler/ImageSourceInfo.h +21 -0
- package/kepler/ViewManagerFactory.cpp +36 -0
- package/kepler/ViewManagerFactory.h +29 -0
- package/kepler/blurhash/common.h +11 -10
- package/kepler/blurhash/decode.cpp +26 -16
- package/kepler/contentposition/ImageContentPosition.cpp +50 -69
- package/kepler/contentposition/ImageContentPosition.h +36 -26
- package/kepler/enums/ImageContentFit.h +47 -15
- package/kepler/enums/ImagePriority.h +12 -13
- package/kepler/test/blurhash/decode.cpp +36 -27
- package/kepler/test/contentposition/ImageContentPosition.cpp +70 -76
- package/kepler/test/thumbhash/decode.cpp +18 -10
- package/kepler/test/utils/Base64.cpp +73 -0
- package/kepler/test/utils/ColorUtils.cpp +53 -0
- package/kepler/test/utils/SourceSelection.cpp +87 -0
- package/kepler/thumbhash/decode.cpp +7 -16
- package/kepler/utils/Base64.cpp +85 -0
- package/kepler/utils/Base64.h +36 -0
- package/kepler/utils/ColorUtils.h +26 -0
- package/kepler/utils/SourceSelection.cpp +80 -0
- package/kepler/utils/SourceSelection.h +65 -0
- package/lib/aarch64-release/com.amazon.kepler.uitoolkit.react.expoimageapp.so +0 -0
- package/lib/aarch64-release/libexpo-image-3.so +0 -0
- package/lib/armv7-release/com.amazon.kepler.uitoolkit.react.expoimageapp.so +0 -0
- package/lib/armv7-release/libexpo-image-3.so +0 -0
- package/lib/x86_64-release/com.amazon.kepler.uitoolkit.react.expoimageapp.so +0 -0
- package/lib/x86_64-release/libexpo-image-3.so +0 -0
- package/package.json +1 -1
- package/react-native.config.js +12 -4
- package/src/ExpoImageModules.kepler.ts +1 -1
- package/src/ImageViewNativeComponent.ts +1 -1
- package/kepler/ExpoImage.cpp +0 -63
- package/kepler/ExpoImage.h +0 -29
- package/kepler/ExpoImageCacheHandler.cpp +0 -15
- package/kepler/ExpoImageCacheHandler.h +0 -28
- package/kepler/ExpoImageComponent.cpp +0 -579
- package/kepler/ExpoImageComponent.h +0 -199
- package/kepler/ImageWrapper/BlurhashImageWrapper.cpp +0 -37
- package/kepler/ImageWrapper/BlurhashImageWrapper.h +0 -23
- package/kepler/ImageWrapper/CacheImageWrapper.cpp +0 -80
- package/kepler/ImageWrapper/CacheImageWrapper.h +0 -41
- package/kepler/ImageWrapper/HashImageWrapper.cpp +0 -21
- package/kepler/ImageWrapper/HashImageWrapper.h +0 -22
- package/kepler/ImageWrapper/ImageWrapper.cpp +0 -24
- package/kepler/ImageWrapper/ImageWrapper.h +0 -33
- package/kepler/ImageWrapper/LocalImageWrapper.cpp +0 -61
- package/kepler/ImageWrapper/LocalImageWrapper.h +0 -30
- package/kepler/ImageWrapper/ThumbhashImageWrapper.cpp +0 -33
- package/kepler/ImageWrapper/ThumbhashImageWrapper.h +0 -20
- package/kepler/KeplerImageViewComponent.h +0 -64
- package/kepler/KeplerInit.cpp +0 -35
- package/kepler/managers/ExpoImageManager.cpp +0 -38
- package/kepler/managers/ExpoImageManager.h +0 -23
- package/kepler/test/ExpoImage.cpp +0 -73
- package/kepler/test/ExpoImageComponent.cpp +0 -304
- package/kepler/test/managers/ExpoImageManager.cpp +0 -39
- package/kepler/test/utils/LoaderDelegate.cpp +0 -130
- package/kepler/utils/PlaceholderImageLoaderDelegate.cpp +0 -26
- package/kepler/utils/PlaceholderImageLoaderDelegate.h +0 -26
- package/kepler/utils/PrefetchImageLoaderDelegate.cpp +0 -55
- package/kepler/utils/PrefetchImageLoaderDelegate.h +0 -35
- package/kepler/utils/SourceImageLoaderDelegate.cpp +0 -47
- package/kepler/utils/SourceImageLoaderDelegate.h +0 -42
- package/kepler/utils/SourceImageLoaderDelegateEmitter.cpp +0 -15
- package/kepler/utils/SourceImageLoaderDelegateEmitter.h +0 -28
- package/kepler-compatibility.json +0 -6
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
-
*
|
|
4
|
-
* PROPRIETARY/CONFIDENTIAL
|
|
5
|
-
*
|
|
6
|
-
* Use is subject to license terms.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/*
|
|
10
|
-
* This header is added as a workaround until we figure out whether
|
|
11
|
-
* we need to have KeplerImageViewComponent included here and how to achieve that
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
#pragma once
|
|
15
|
-
|
|
16
|
-
#include <Volta/graphics/DrawableLayer.h>
|
|
17
|
-
#include <Volta/graphics/OpacityLayer.h>
|
|
18
|
-
#include <Volta/utils/Image.h>
|
|
19
|
-
#include <graphics/ImageFilterLayer.h>
|
|
20
|
-
|
|
21
|
-
#include "KeplerScript/components/KeplerViewComponent.h"
|
|
22
|
-
|
|
23
|
-
namespace volta::react {
|
|
24
|
-
class ImageDrawableLayer : public volta::graphics::DrawableLayer {
|
|
25
|
-
public:
|
|
26
|
-
friend class KeplerImageViewComponent;
|
|
27
|
-
enum class Fit { Cover, Contain, Stretch, Repeat, Center };
|
|
28
|
-
ImageDrawableLayer();
|
|
29
|
-
void onDraw(volta::graphics::Canvas& canvas);
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
class KeplerImageViewComponent {
|
|
33
|
-
public:
|
|
34
|
-
KeplerImageViewComponent();
|
|
35
|
-
~KeplerImageViewComponent() noexcept;
|
|
36
|
-
|
|
37
|
-
mutable ImageDrawableLayer imageDrawableLayer_;
|
|
38
|
-
mutable volta::graphics::OpacityLayer opacityLayer_;
|
|
39
|
-
|
|
40
|
-
void didReceiveImage(const facebook::react::ImageResponse& imageResponse) const;
|
|
41
|
-
void didReceiveProgress(float progress) const;
|
|
42
|
-
void didReceiveFailure() const;
|
|
43
|
-
|
|
44
|
-
void setOverlayColor(const int& newValue);
|
|
45
|
-
|
|
46
|
-
void setTintColor(const int& newValue);
|
|
47
|
-
|
|
48
|
-
void setBlurRadius(const double& newValue);
|
|
49
|
-
|
|
50
|
-
void setResizeMode(const std::string& newValue);
|
|
51
|
-
|
|
52
|
-
void setDefaultSource(const utils::json::JsonContainer& newValue);
|
|
53
|
-
|
|
54
|
-
// void buildAccessibilityInfo(AccessibilityContext& accessibilityContext) override;
|
|
55
|
-
|
|
56
|
-
void updateLayoutMetrics(
|
|
57
|
-
const std::shared_ptr<KeplerViewComponentLayoutMetrics>& oldLayoutMetrics,
|
|
58
|
-
const std::shared_ptr<KeplerViewComponentLayoutMetrics>& newLayoutMetrics);
|
|
59
|
-
|
|
60
|
-
void updateState(const std::shared_ptr<const void>& oldState, const std::shared_ptr<const void>& newState);
|
|
61
|
-
|
|
62
|
-
void changeImageLayer(ImageDrawableLayer newImageLayer);
|
|
63
|
-
};
|
|
64
|
-
} // namespace volta::react
|
package/kepler/KeplerInit.cpp
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
-
*
|
|
4
|
-
* PROPRIETARY/CONFIDENTIAL
|
|
5
|
-
*
|
|
6
|
-
* Use is subject to license terms.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
#include <KeplerScript/logger/KPLog.h>
|
|
10
|
-
#include <KeplerScript/utils/autolink/KeplerAutoLinkInfo.h>
|
|
11
|
-
#include <keplerui-072/keplerscript-export.h>
|
|
12
|
-
|
|
13
|
-
#include "ExpoImage.h"
|
|
14
|
-
#include "RegisterModule.h"
|
|
15
|
-
#include "managers/ExpoImageManager.h"
|
|
16
|
-
|
|
17
|
-
extern "C" {
|
|
18
|
-
KEPLERSCRIPT_EXPORT void keplerAutoLinkInitV1(const kepler::autolink::v1::KeplerAutoLinkInfo* autoLinkInfo) noexcept {
|
|
19
|
-
volta::react::KPLog.debug("keplerAutoLinkInitV1 for ExpoImage");
|
|
20
|
-
|
|
21
|
-
REGISTER_MODULE(autoLinkInfo, ExpoImage, "ExpoImage");
|
|
22
|
-
|
|
23
|
-
auto* customViewDelegate = autoLinkInfo->customViewManagerDelegate;
|
|
24
|
-
customViewDelegate->registerComponentViewManager("ExpoImageComponent", []() {
|
|
25
|
-
volta::react::KPLog.debug("Creating ExpoImageComponent");
|
|
26
|
-
return std::make_unique<ExpoImageManager>();
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
volta::react::KPLog.debug("ExpoImage after registering module");
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
int main() {
|
|
34
|
-
return 0;
|
|
35
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
-
*
|
|
4
|
-
* PROPRIETARY/CONFIDENTIAL
|
|
5
|
-
*
|
|
6
|
-
* Use is subject to license terms.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
#include "ExpoImageManager.h"
|
|
10
|
-
|
|
11
|
-
#include <KeplerScript/components/KeplerViewComponent.h>
|
|
12
|
-
#include <KeplerScript/utils/image/KeplerScriptImageCacheHandler.h>
|
|
13
|
-
|
|
14
|
-
#include "ExpoImageComponent.h"
|
|
15
|
-
|
|
16
|
-
ExpoImageManager::ExpoImageManager() :
|
|
17
|
-
imageCacheHandler_(std::make_shared<volta::react::KeplerScriptImageCacheHandler>()) {}
|
|
18
|
-
|
|
19
|
-
std::shared_ptr<volta::react::KeplerViewComponent> ExpoImageManager::createComponentView() {
|
|
20
|
-
VOLTA_TRACE_SECTION(ExpoImageManager::createComponentView);
|
|
21
|
-
return volta::RenderObject::create<ExpoImageComponent>(imageCacheHandler_);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
void ExpoImageManager::aggregatePropSetters(volta::react::PropSetterAggregator& aggregator) {
|
|
25
|
-
ViewComponentViewManager::aggregatePropSetters(aggregator);
|
|
26
|
-
aggregator.addPropSetter("contentFit", &ExpoImageComponent::setContentFit, std::string{""});
|
|
27
|
-
aggregator.addPropSetter("placeholderContentFit", &ExpoImageComponent::setPlaceholderContentFit, std::string{""});
|
|
28
|
-
aggregator.addPropSetter("allowDownscaling", &ExpoImageComponent::setAllowDownscaling, true);
|
|
29
|
-
aggregator.addPropSetter("contentPosition", &ExpoImageComponent::setContentPosition, utils::json::JsonContainer());
|
|
30
|
-
aggregator.addPropSetter("overlayColor", &ExpoImageComponent::setOverlayColor, std::numeric_limits<int>::max());
|
|
31
|
-
aggregator.addPropSetter("tintColor", &ExpoImageComponent::setTintColor, std::numeric_limits<int>::max());
|
|
32
|
-
aggregator.addPropSetter("blurRadius", &ExpoImageComponent::setBlurRadius, 0.0);
|
|
33
|
-
aggregator.addPropSetter("placeholder", &ExpoImageComponent::setPlaceholder, utils::json::JsonContainer());
|
|
34
|
-
aggregator.addPropSetter("source", &ExpoImageComponent::setSource, utils::json::JsonContainer());
|
|
35
|
-
aggregator.addPropSetter("priority", &ExpoImageComponent::setPriority, std::string{""});
|
|
36
|
-
aggregator.addPropSetter("transition", &ExpoImageComponent::setTransition, utils::json::JsonContainer());
|
|
37
|
-
aggregator.addPropSetter("recyclingKey", &ExpoImageComponent::setRecyclingKey, std::string{""});
|
|
38
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
-
*
|
|
4
|
-
* PROPRIETARY/CONFIDENTIAL
|
|
5
|
-
*
|
|
6
|
-
* Use is subject to license terms.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
#pragma once
|
|
10
|
-
|
|
11
|
-
#include <KeplerScript/components/ViewComponentViewManager.h>
|
|
12
|
-
#include <KeplerScript/utils/image/KeplerScriptImageCacheHandler.h>
|
|
13
|
-
|
|
14
|
-
class ExpoImageManager : public volta::react::ViewComponentViewManager {
|
|
15
|
-
public:
|
|
16
|
-
ExpoImageManager();
|
|
17
|
-
void aggregatePropSetters(volta::react::PropSetterAggregator& aggregator) override;
|
|
18
|
-
std::shared_ptr<volta::react::KeplerViewComponent> createComponentView() override;
|
|
19
|
-
|
|
20
|
-
private:
|
|
21
|
-
std::shared_ptr<volta::react::KeplerScriptImageCacheHandler> imageCacheHandler_;
|
|
22
|
-
};
|
|
23
|
-
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
#include "../ExpoImage.h"
|
|
2
|
-
|
|
3
|
-
#include <KeplerScript/components/ImageSourceBuilder.h>
|
|
4
|
-
#include <KeplerScript/logger/KPLog.h>
|
|
5
|
-
#include <KeplerScript/utils/image/KeplerScriptImageLoaderDelegate.h>
|
|
6
|
-
#include <gmock/gmock-actions.h>
|
|
7
|
-
#include <gmock/gmock.h>
|
|
8
|
-
#include <gtest/gtest.h>
|
|
9
|
-
|
|
10
|
-
#include "../ExpoImageCacheHandler.h"
|
|
11
|
-
#include "catch.hpp"
|
|
12
|
-
|
|
13
|
-
namespace volta::react {
|
|
14
|
-
|
|
15
|
-
std::unique_ptr<volta::graphics::Image> mockImage() {
|
|
16
|
-
auto data = std::make_unique<uint8_t[]>(4);
|
|
17
|
-
return volta::graphics::Image::makeRasterImage(volta::graphics::Size{1, 1}, std::move(data), 4);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
void fullfillPromise(volta::react::Promise& promise) {
|
|
21
|
-
promise.promiseOperation_(std::make_shared<Promise>(Callback(), Callback()));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
class MockExpoImageCacheHandler : public IExpoImageCacheHandler {
|
|
25
|
-
public:
|
|
26
|
-
MockExpoImageCacheHandler() = default;
|
|
27
|
-
|
|
28
|
-
MOCK_METHOD(void, clearMemoryCache, (), (override));
|
|
29
|
-
MOCK_METHOD(void, clearDiskCache, (), (override));
|
|
30
|
-
|
|
31
|
-
MOCK_METHOD(
|
|
32
|
-
void,
|
|
33
|
-
load,
|
|
34
|
-
(volta::ImageDetails & details, const volta::react::KeplerScriptImageLoaderDelegate::Shared& delegate),
|
|
35
|
-
(override));
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
TEST_CASE("ExpoImage") {
|
|
39
|
-
auto handler = std::make_shared<MockExpoImageCacheHandler>();
|
|
40
|
-
|
|
41
|
-
ExpoImage module(handler);
|
|
42
|
-
|
|
43
|
-
SECTION("load") {
|
|
44
|
-
std::vector<std::string> urls = {
|
|
45
|
-
"https://example.com/image1.png",
|
|
46
|
-
"https://example.com/image2.png",
|
|
47
|
-
"https://example.com/image3.png"};
|
|
48
|
-
|
|
49
|
-
EXPECT_CALL(*handler, load(testing::_, testing::_))
|
|
50
|
-
.Times(3)
|
|
51
|
-
.WillRepeatedly(
|
|
52
|
-
testing::Invoke([](volta::ImageDetails& details,
|
|
53
|
-
const volta::react::KeplerScriptImageLoaderDelegate::Shared& delegate) {
|
|
54
|
-
auto mockImg = mockImage();
|
|
55
|
-
|
|
56
|
-
delegate->notifyImageLoadSuccess(*mockImg);
|
|
57
|
-
}));
|
|
58
|
-
|
|
59
|
-
auto promise = module.prefetch(urls);
|
|
60
|
-
fullfillPromise(promise);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
SECTION("clearMemoryCache") {
|
|
64
|
-
EXPECT_CALL(*handler, clearMemoryCache()).Times(1);
|
|
65
|
-
module.clearMemoryCache();
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
SECTION("clearDiskCache") {
|
|
69
|
-
EXPECT_CALL(*handler, clearDiskCache()).Times(1);
|
|
70
|
-
module.clearDiskCache();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
} // namespace volta::react
|
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024-2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
-
*
|
|
4
|
-
* PROPRIETARY/CONFIDENTIAL
|
|
5
|
-
*
|
|
6
|
-
* Use is subject to license terms.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
#include "../ExpoImageComponent.h"
|
|
10
|
-
|
|
11
|
-
#include <KeplerScript/utils/image/KeplerScriptImageCacheHandler.h>
|
|
12
|
-
#include <Volta/graphics/Picture.h>
|
|
13
|
-
#include <Volta/graphics/Recorder.h>
|
|
14
|
-
#include <gmock/gmock-actions.h>
|
|
15
|
-
#include <gmock/gmock.h>
|
|
16
|
-
#include <graphics/Canvas.h>
|
|
17
|
-
#include <gtest/gtest.h>
|
|
18
|
-
|
|
19
|
-
#include <cstddef>
|
|
20
|
-
|
|
21
|
-
#include "catch.hpp"
|
|
22
|
-
|
|
23
|
-
class MockImageLoaderDelegate : public volta::IImageLoaderDelegate {
|
|
24
|
-
public:
|
|
25
|
-
// NOLINTBEGIN(misc-non-private-member-variables-in-classes)
|
|
26
|
-
MOCK_METHOD(void, notifyImageLoadStart, (), (override));
|
|
27
|
-
MOCK_METHOD(void, notifyImageLoadProgress, (float progress), (override));
|
|
28
|
-
MOCK_METHOD(void, notifyImageLoadSuccess, (volta::graphics::Image image), (override));
|
|
29
|
-
MOCK_METHOD(void, notifyImageLoadSuccess, (volta::image::ImageRef imageRef), (override));
|
|
30
|
-
MOCK_METHOD(
|
|
31
|
-
void,
|
|
32
|
-
notifyAnimatedImageLoadSuccess,
|
|
33
|
-
(std::shared_ptr<volta::animation::AnimatedImageDrawableLayer> image),
|
|
34
|
-
(override));
|
|
35
|
-
MOCK_METHOD(
|
|
36
|
-
void,
|
|
37
|
-
notifyNinePatchImageLoadSuccess,
|
|
38
|
-
(std::shared_ptr<volta::graphics::NinePatchImage> image),
|
|
39
|
-
(override));
|
|
40
|
-
MOCK_METHOD(void, notifyImageLoadFailure, (volta::ImageLoadError error), (override));
|
|
41
|
-
MOCK_METHOD(void, notifyImageLoadCancelled, (), (override));
|
|
42
|
-
MOCK_METHOD(void, notifyImagePrefetchFailure, (volta::ImageLoadError error), (override));
|
|
43
|
-
MOCK_METHOD(void, notifyImagePrefetchComplete, (), (override));
|
|
44
|
-
// NOLINTEND(misc-non-private-member-variables-in-classes)
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
std::unique_ptr<volta::graphics::Image> mockImage(int64_t width, int64_t height) {
|
|
48
|
-
auto data = std::make_unique<uint8_t[]>(height * width * 4);
|
|
49
|
-
return volta::graphics::Image::makeRasterImage(
|
|
50
|
-
volta::graphics::Size{static_cast<float>(width), static_cast<float>(height)},
|
|
51
|
-
std::move(data),
|
|
52
|
-
width * 4);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
class MockImageWrapper : public ImageWrapper {
|
|
56
|
-
public:
|
|
57
|
-
MockImageWrapper(
|
|
58
|
-
int width,
|
|
59
|
-
int height,
|
|
60
|
-
const facebook::react::ImageSource& source,
|
|
61
|
-
const volta::IImageLoaderDelegate::Shared& loaderDelegate) :
|
|
62
|
-
ImageWrapper(source, loaderDelegate) {
|
|
63
|
-
image_ = mockImage(width, height);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
void load() override {}
|
|
67
|
-
bool isLoaded() override {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
volta::graphics::Image* getImage() override {
|
|
71
|
-
return image_.get();
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
private:
|
|
75
|
-
std::unique_ptr<volta::graphics::Image> image_;
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
// NOLINTNEXTLINE - warnings caused by catch2 macro internal implementation
|
|
79
|
-
TEST_CASE("ExpoImageDrawableLayer") {
|
|
80
|
-
ExpoImageDrawableLayer layer;
|
|
81
|
-
auto mockImg = mockImage(100, 100);
|
|
82
|
-
|
|
83
|
-
SECTION("setSize") {
|
|
84
|
-
auto size = volta::graphics::Size{21.f, 37.f};
|
|
85
|
-
layer.setSize(size);
|
|
86
|
-
|
|
87
|
-
EXPECT_EQ(layer.size_, size);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
SECTION("onDraw") {
|
|
91
|
-
auto canvas = volta::graphics::Canvas::makeTestingCanvas();
|
|
92
|
-
|
|
93
|
-
facebook::react::ImageSource source;
|
|
94
|
-
auto delegate = std::make_shared<MockImageLoaderDelegate>();
|
|
95
|
-
auto clipRect = volta::graphics::Rect{0.f, 0.f, 50.f, 50.f};
|
|
96
|
-
|
|
97
|
-
layer.imageWrapper_ = std::make_shared<MockImageWrapper>(100, 100, source, delegate);
|
|
98
|
-
layer.setSize({50.f, 50.f});
|
|
99
|
-
layer.onDraw(canvas);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
SECTION("paintImageWithContentFit cover") {
|
|
103
|
-
auto canvas = volta::graphics::Canvas::makeTestingCanvas();
|
|
104
|
-
|
|
105
|
-
volta::graphics::Rect rect{-50.f, -50.f, 50.f, 50.f};
|
|
106
|
-
|
|
107
|
-
layer.paintImageWithContentFit(*mockImg, canvas, volta::graphics::Paint(), ImageContentFit::Cover, false);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
SECTION("paintImageWithContentFit contain") {
|
|
111
|
-
auto canvas = volta::graphics::Canvas::makeTestingCanvas();
|
|
112
|
-
|
|
113
|
-
volta::graphics::Rect rect{50.f, 0.f, 150.f, 100.f};
|
|
114
|
-
|
|
115
|
-
layer.setSize({200.f, 100.f});
|
|
116
|
-
|
|
117
|
-
layer.paintImageWithContentFit(*mockImg, canvas, volta::graphics::Paint(), ImageContentFit::Contain, false);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
SECTION("paintImageWithContentFit fill") {
|
|
121
|
-
auto canvas = volta::graphics::Canvas::makeTestingCanvas();
|
|
122
|
-
volta::graphics::Rect rect{0.f, 0.f, 200.f, 100.f};
|
|
123
|
-
|
|
124
|
-
layer.setSize({200.f, 100.f});
|
|
125
|
-
|
|
126
|
-
layer.paintImageWithContentFit(*mockImg, canvas, volta::graphics::Paint(), ImageContentFit::Fill, false);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
SECTION("paintImageWithContentFit none") {
|
|
130
|
-
auto canvas = volta::graphics::Canvas::makeTestingCanvas();
|
|
131
|
-
volta::graphics::Rect rect{-25.f, -25.f, 75.f, 75.f};
|
|
132
|
-
|
|
133
|
-
layer.setSize({50.f, 50.f});
|
|
134
|
-
|
|
135
|
-
layer.paintImageWithContentFit(*mockImg, canvas, volta::graphics::Paint(), ImageContentFit::None, false);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
SECTION("paintImageWithContentFit scaleDown") {
|
|
139
|
-
auto canvas = volta::graphics::Canvas::makeTestingCanvas();
|
|
140
|
-
volta::graphics::Rect rect{-25.f, -25.f, 75.f, 75.f};
|
|
141
|
-
|
|
142
|
-
layer.setSize({50.f, 50.f});
|
|
143
|
-
|
|
144
|
-
layer.paintImageWithContentFit(*mockImg, canvas, volta::graphics::Paint(), ImageContentFit::ScaleDown, false);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// NOLINTNEXTLINE - warnings caused by catch2 macro internal implementation
|
|
149
|
-
TEST_CASE("ExpoImageComponent") {
|
|
150
|
-
auto handler = std::make_shared<volta::react::KeplerScriptImageCacheHandler>();
|
|
151
|
-
ExpoImageComponent component(handler);
|
|
152
|
-
|
|
153
|
-
SECTION("setOverlayColor") {
|
|
154
|
-
component.setOverlayColor(0x12345678);
|
|
155
|
-
|
|
156
|
-
EXPECT_EQ(component.overlayColor_.argb(), static_cast<uint32_t>(0x12345678));
|
|
157
|
-
EXPECT_EQ(component.imageDrawableLayer_.overlayColor_.argb(), static_cast<uint32_t>(0x12345678));
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
SECTION("setTintColor") {
|
|
161
|
-
component.setTintColor(0x12345678);
|
|
162
|
-
|
|
163
|
-
EXPECT_EQ(component.tintColor_.argb(), static_cast<uint32_t>(0x12345678));
|
|
164
|
-
EXPECT_EQ(component.imageDrawableLayer_.tintColor_.argb(), static_cast<uint32_t>(0x12345678));
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
SECTION("setBlurRadius") {
|
|
168
|
-
component.setBlurRadius(2137.0);
|
|
169
|
-
|
|
170
|
-
EXPECT_EQ(component.imageDrawableLayer_.blurRadius_, 2137.0);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
SECTION("setBlurRadius") {
|
|
174
|
-
component.setBlurRadius(2137.0);
|
|
175
|
-
|
|
176
|
-
EXPECT_EQ(component.imageDrawableLayer_.blurRadius_, 2137.0);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
SECTION("setContentFit") {
|
|
180
|
-
auto handler = std::make_shared<volta::react::KeplerScriptImageCacheHandler>();
|
|
181
|
-
|
|
182
|
-
ExpoImageComponent c1(handler);
|
|
183
|
-
|
|
184
|
-
c1.setContentFit("fill");
|
|
185
|
-
|
|
186
|
-
EXPECT_EQ(c1.contentFit_, std::string{"fill"});
|
|
187
|
-
EXPECT_EQ(c1.imageDrawableLayer_.imageContentFit_, ImageContentFit::Fill);
|
|
188
|
-
|
|
189
|
-
ExpoImageComponent c2(handler);
|
|
190
|
-
|
|
191
|
-
c2.setContentFit("something-strange");
|
|
192
|
-
|
|
193
|
-
EXPECT_EQ(c2.contentFit_, std::string{"something-strange"});
|
|
194
|
-
EXPECT_EQ(c2.imageDrawableLayer_.imageContentFit_, ImageContentFit::Cover);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
SECTION("setPlaceholderContentFit") {
|
|
198
|
-
auto handler = std::make_shared<volta::react::KeplerScriptImageCacheHandler>();
|
|
199
|
-
|
|
200
|
-
ExpoImageComponent c1(handler);
|
|
201
|
-
|
|
202
|
-
c1.setPlaceholderContentFit("fill");
|
|
203
|
-
|
|
204
|
-
EXPECT_EQ(c1.placeholderContentFit_, std::string{"fill"});
|
|
205
|
-
EXPECT_EQ(c1.imageDrawableLayer_.imagePlaceholderContentFit_, ImageContentFit::Fill);
|
|
206
|
-
|
|
207
|
-
ExpoImageComponent c2(handler);
|
|
208
|
-
|
|
209
|
-
c2.setPlaceholderContentFit("something-strange");
|
|
210
|
-
|
|
211
|
-
EXPECT_EQ(c2.placeholderContentFit_, std::string{"something-strange"});
|
|
212
|
-
EXPECT_EQ(c2.imageDrawableLayer_.imagePlaceholderContentFit_, ImageContentFit::ScaleDown);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
SECTION("setAllowDownscaling") {
|
|
216
|
-
component.setAllowDownscaling(true);
|
|
217
|
-
|
|
218
|
-
EXPECT_EQ(component.imageDrawableLayer_.imageAllowDownscaling_, true);
|
|
219
|
-
|
|
220
|
-
component.setAllowDownscaling(false);
|
|
221
|
-
|
|
222
|
-
EXPECT_EQ(component.imageDrawableLayer_.imageAllowDownscaling_, false);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
SECTION("setPlaceholder") {
|
|
226
|
-
auto sources = utils::json::JsonContainer::parseJson(
|
|
227
|
-
R"([{"uri": "https://example.com/image.png", "width": 100, "height": 100}])");
|
|
228
|
-
|
|
229
|
-
facebook::react::ImageSource imgSource;
|
|
230
|
-
imgSource.uri = "https://example.com/image.png";
|
|
231
|
-
imgSource.size = {100.f, 100.f};
|
|
232
|
-
|
|
233
|
-
auto delegate = std::make_shared<MockImageLoaderDelegate>();
|
|
234
|
-
|
|
235
|
-
component.currentPlaceholder_ = std::make_shared<MockImageWrapper>(100, 100, imgSource, delegate);
|
|
236
|
-
component.setPlaceholder(sources);
|
|
237
|
-
|
|
238
|
-
EXPECT_EQ(component.placeholders_.size(), 1);
|
|
239
|
-
EXPECT_EQ(component.placeholders_.at(0).uri, std::string{"https://example.com/image.png"});
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
SECTION("setSource") {
|
|
243
|
-
auto sources = utils::json::JsonContainer::parseJson(
|
|
244
|
-
R"([{"uri": "https://example.com/image.png", "width": 100, "height": 100}])");
|
|
245
|
-
|
|
246
|
-
facebook::react::ImageSource imgSource;
|
|
247
|
-
imgSource.uri = "https://example.com/image.png";
|
|
248
|
-
imgSource.size = {100.f, 100.f};
|
|
249
|
-
|
|
250
|
-
auto delegate = std::make_shared<MockImageLoaderDelegate>();
|
|
251
|
-
|
|
252
|
-
component.currentSource_ = std::make_shared<MockImageWrapper>(100, 100, imgSource, delegate);
|
|
253
|
-
component.setSource(sources);
|
|
254
|
-
|
|
255
|
-
EXPECT_EQ(component.sources_.size(), 1);
|
|
256
|
-
EXPECT_EQ(component.sources_.at(0).uri, std::string{"https://example.com/image.png"});
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
SECTION("setPriority") {
|
|
260
|
-
auto handler = std::make_shared<volta::react::KeplerScriptImageCacheHandler>();
|
|
261
|
-
|
|
262
|
-
ExpoImageComponent c1(handler);
|
|
263
|
-
|
|
264
|
-
c1.setPriority("high");
|
|
265
|
-
|
|
266
|
-
EXPECT_EQ(c1.priority_, ImagePriority::High);
|
|
267
|
-
|
|
268
|
-
ExpoImageComponent c2(handler);
|
|
269
|
-
|
|
270
|
-
c1.setPriority("something-strange");
|
|
271
|
-
|
|
272
|
-
EXPECT_EQ(c1.priority_, ImagePriority::Normal);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
SECTION("setContentPosition") {
|
|
276
|
-
auto position =
|
|
277
|
-
utils::json::JsonContainer::parseJson(R"({"top": 10.0, "bottom": 20.0, "right": 30.0, "left": 40.0})");
|
|
278
|
-
|
|
279
|
-
component.setContentPosition(position);
|
|
280
|
-
|
|
281
|
-
auto expectedPosition = ImageContentPosition{{10.f, false}, {20.f, false}, {30.f, false}, {40.f, false}};
|
|
282
|
-
|
|
283
|
-
EXPECT_EQ(component.imageDrawableLayer_.imageContentPosition_.top_.value_, expectedPosition.top_.value_);
|
|
284
|
-
EXPECT_EQ(component.imageDrawableLayer_.imageContentPosition_.bottom_.value_, expectedPosition.bottom_.value_);
|
|
285
|
-
EXPECT_EQ(component.imageDrawableLayer_.imageContentPosition_.right_.value_, expectedPosition.right_.value_);
|
|
286
|
-
EXPECT_EQ(component.imageDrawableLayer_.imageContentPosition_.left_.value_, expectedPosition.left_.value_);
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
SECTION("setTransition") {
|
|
290
|
-
auto transition = utils::json::JsonContainer::parseJson(R"({"duration": 1000.0, "timing": "ease-in"})");
|
|
291
|
-
component.setTransition(transition);
|
|
292
|
-
|
|
293
|
-
EXPECT_EQ(component.shouldAnimateOnSrcChange_, true);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
SECTION("setRecyclingKey") {
|
|
297
|
-
component.setRecyclingKey("a-key");
|
|
298
|
-
EXPECT_EQ(component.shouldClearOnSourceChange_, false);
|
|
299
|
-
EXPECT_EQ(component.recyclingKey_, std::string{"a-key"});
|
|
300
|
-
|
|
301
|
-
component.setRecyclingKey("b-key");
|
|
302
|
-
EXPECT_EQ(component.shouldClearOnSourceChange_, true);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
#include "../../managers/ExpoImageManager.h"
|
|
2
|
-
|
|
3
|
-
#include <KeplerScript/components/ViewComponentViewManager.h>
|
|
4
|
-
#include <gmock/gmock-actions.h>
|
|
5
|
-
#include <gmock/gmock.h>
|
|
6
|
-
#include <gtest/gtest.h>
|
|
7
|
-
|
|
8
|
-
#include "catch.hpp"
|
|
9
|
-
|
|
10
|
-
TEST_CASE("ExpoImageManager") {
|
|
11
|
-
ExpoImageManager manager;
|
|
12
|
-
|
|
13
|
-
SECTION("aggregatePropSetters") {
|
|
14
|
-
volta::react::PropSetterAggregator aggregator;
|
|
15
|
-
|
|
16
|
-
manager.aggregatePropSetters(aggregator);
|
|
17
|
-
|
|
18
|
-
auto end = aggregator.propSetterMap_.end();
|
|
19
|
-
|
|
20
|
-
EXPECT_NE(aggregator.propSetterMap_.find("contentFit"), end);
|
|
21
|
-
EXPECT_NE(aggregator.propSetterMap_.find("placeholderContentFit"), end);
|
|
22
|
-
EXPECT_NE(aggregator.propSetterMap_.find("allowDownscaling"), end);
|
|
23
|
-
EXPECT_NE(aggregator.propSetterMap_.find("contentPosition"), end);
|
|
24
|
-
EXPECT_NE(aggregator.propSetterMap_.find("overlayColor"), end);
|
|
25
|
-
EXPECT_NE(aggregator.propSetterMap_.find("tintColor"), end);
|
|
26
|
-
EXPECT_NE(aggregator.propSetterMap_.find("blurRadius"), end);
|
|
27
|
-
EXPECT_NE(aggregator.propSetterMap_.find("placeholder"), end);
|
|
28
|
-
EXPECT_NE(aggregator.propSetterMap_.find("source"), end);
|
|
29
|
-
EXPECT_NE(aggregator.propSetterMap_.find("priority"), end);
|
|
30
|
-
EXPECT_NE(aggregator.propSetterMap_.find("transition"), end);
|
|
31
|
-
EXPECT_NE(aggregator.propSetterMap_.find("recyclingKey"), end);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
SECTION("createCOmponentView") {
|
|
35
|
-
auto component = manager.createComponentView();
|
|
36
|
-
|
|
37
|
-
EXPECT_TRUE(component);
|
|
38
|
-
}
|
|
39
|
-
}
|