@amazon-devices/expo-image 2.0.9000000001 → 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 -5
- 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 -7
package/CMakeLists.txt
CHANGED
|
@@ -11,81 +11,103 @@
|
|
|
11
11
|
# IMPLIED, OR STATUTORY, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
|
12
12
|
# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
|
13
13
|
#
|
|
14
|
-
set(PACKAGE_NAME "expo-image")
|
|
15
|
-
set(AUTO_LINK_PACKAGE_NAME "${PACKAGE_NAME}-${KEPLER_REACT_NATIVE_MAJOR_VERSION}")
|
|
16
|
-
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/kepler)
|
|
17
|
-
set(SOURCES_KEPLER
|
|
18
|
-
kepler/ExpoImage.cpp
|
|
19
|
-
kepler/ExpoImageCacheHandler.cpp
|
|
20
|
-
kepler/ExpoImageComponent.cpp
|
|
21
|
-
|
|
22
|
-
kepler/utils/PlaceholderImageLoaderDelegate.cpp
|
|
23
|
-
kepler/utils/PrefetchImageLoaderDelegate.cpp
|
|
24
|
-
kepler/utils/SourceImageLoaderDelegate.cpp
|
|
25
|
-
kepler/utils/SourceImageLoaderDelegateEmitter.cpp
|
|
26
14
|
|
|
27
|
-
|
|
15
|
+
cmake_minimum_required(VERSION 3.22)
|
|
28
16
|
|
|
29
|
-
|
|
17
|
+
set(EXPO_IMAGE_MAJOR_VERSION 3)
|
|
18
|
+
set(EXPO_IMAGE_MINOR_VERSION 0)
|
|
19
|
+
set(EXPO_IMAGE_VERSION "${EXPO_IMAGE_MAJOR_VERSION}.${EXPO_IMAGE_MINOR_VERSION}")
|
|
30
20
|
|
|
31
|
-
|
|
21
|
+
set(PACKAGE_NAME expo-image)
|
|
22
|
+
set(AUTO_LINK_PACKAGE_NAME ${PACKAGE_NAME}-${EXPO_IMAGE_MAJOR_VERSION})
|
|
32
23
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
kepler/ImageWrapper/ImageWrapper.cpp
|
|
37
|
-
kepler/ImageWrapper/LocalImageWrapper.cpp
|
|
38
|
-
kepler/ImageWrapper/ThumbhashImageWrapper.cpp
|
|
24
|
+
find_package(Apmf REQUIRED)
|
|
25
|
+
find_package(Kepler REQUIRED)
|
|
26
|
+
find_package(turbomoduleAPI CONFIG REQUIRED)
|
|
39
27
|
|
|
40
|
-
|
|
28
|
+
kepler_add_idl_import_library(
|
|
29
|
+
expo_image_idl
|
|
30
|
+
PACKAGES
|
|
31
|
+
com.amazon.kepler.uitoolkit.view
|
|
32
|
+
com.amazon.kepler.uitoolkit.react
|
|
33
|
+
com.amazon.kepler.uitoolkit.graphics
|
|
41
34
|
)
|
|
42
35
|
|
|
43
|
-
set(
|
|
44
|
-
|
|
45
|
-
find_library (MBED_CRYPTO NAMES mbedcrypto REQUIRED)
|
|
46
|
-
|
|
47
|
-
add_library(${PACKAGE_NAME} STATIC ${SOURCES_KEPLER})
|
|
48
|
-
|
|
36
|
+
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/kepler)
|
|
49
37
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
set(HEADERS
|
|
39
|
+
${SRC_DIR}/Constants.h
|
|
40
|
+
${SRC_DIR}/ImageSourceInfo.h
|
|
41
|
+
${SRC_DIR}/enums/ImageContentFit.h
|
|
42
|
+
${SRC_DIR}/enums/ImagePriority.h
|
|
43
|
+
${SRC_DIR}/contentposition/ImageContentPosition.h
|
|
44
|
+
${SRC_DIR}/utils/ColorUtils.h
|
|
45
|
+
${SRC_DIR}/utils/SourceSelection.h
|
|
46
|
+
${SRC_DIR}/utils/Base64.h
|
|
47
|
+
${SRC_DIR}/ExpoImage/ExpoImageTurboModule.h
|
|
48
|
+
${SRC_DIR}/ExpoImage/PrefetchListener.h
|
|
49
|
+
${SRC_DIR}/ExpoImageComponent/ExpoImageComponentViewManager.h
|
|
50
|
+
${SRC_DIR}/ExpoImageComponent/ExpoImageView.h
|
|
51
|
+
${SRC_DIR}/ExpoImageComponent/ExpoImageStore.h
|
|
52
|
+
${SRC_DIR}/ExpoImageComponent/HashImageDecoder.h
|
|
53
|
+
${SRC_DIR}/ExpoImageComponent/ImageLoadListeners.h
|
|
54
|
+
${SRC_DIR}/ExpoImageComponent/TransitionAnimator.h
|
|
55
|
+
${SRC_DIR}/ExpoImageComponent/AccessibilityDelegate.h
|
|
56
|
+
${SRC_DIR}/ViewManagerFactory.h
|
|
54
57
|
)
|
|
55
58
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
set(SOURCES
|
|
60
|
+
${SRC_DIR}/AutoLinkInit.cpp
|
|
61
|
+
${SRC_DIR}/ViewManagerFactory.cpp
|
|
62
|
+
${SRC_DIR}/contentposition/ImageContentPosition.cpp
|
|
63
|
+
${SRC_DIR}/ExpoImage/ExpoImageTurboModule.cpp
|
|
64
|
+
${SRC_DIR}/ExpoImage/PrefetchListener.cpp
|
|
65
|
+
${SRC_DIR}/ExpoImageComponent/ExpoImageComponentViewManager.cpp
|
|
66
|
+
${SRC_DIR}/ExpoImageComponent/ExpoImageView.cpp
|
|
67
|
+
${SRC_DIR}/ExpoImageComponent/HashImageDecoder.cpp
|
|
68
|
+
${SRC_DIR}/ExpoImageComponent/ImageLoadListeners.cpp
|
|
69
|
+
${SRC_DIR}/ExpoImageComponent/TransitionAnimator.cpp
|
|
70
|
+
${SRC_DIR}/ExpoImageComponent/AccessibilityDelegate.cpp
|
|
71
|
+
${SRC_DIR}/utils/SourceSelection.cpp
|
|
72
|
+
${SRC_DIR}/utils/Base64.cpp
|
|
73
|
+
${SRC_DIR}/blurhash/decode.cpp
|
|
74
|
+
${SRC_DIR}/thumbhash/decode.cpp
|
|
61
75
|
)
|
|
62
76
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
PRIVATE
|
|
66
|
-
-fpermissive
|
|
77
|
+
set(LIBRARIES
|
|
78
|
+
turbomoduleAPI::turbomoduleAPI
|
|
67
79
|
)
|
|
68
80
|
|
|
69
|
-
add_library(${AUTO_LINK_PACKAGE_NAME} SHARED ${KEPLER_INIT} ${SOURCES_KEPLER})
|
|
70
81
|
|
|
71
|
-
|
|
82
|
+
kepler_add_library(${AUTO_LINK_PACKAGE_NAME} SHARED ${HEADERS} ${SOURCES})
|
|
72
83
|
|
|
73
|
-
|
|
74
|
-
${AUTO_LINK_PACKAGE_NAME}
|
|
75
|
-
PRIVATE
|
|
76
|
-
${PACKAGE_NAME}
|
|
77
|
-
)
|
|
84
|
+
target_include_directories(${AUTO_LINK_PACKAGE_NAME} PRIVATE ${SRC_DIR})
|
|
78
85
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
${
|
|
86
|
+
target_link_libraries(${AUTO_LINK_PACKAGE_NAME} PRIVATE expo_image_idl ${LIBRARIES})
|
|
87
|
+
|
|
88
|
+
kepler_install_components(${AUTO_LINK_PACKAGE_NAME} IN_PROCESS "/com.amazon.kepler.uitoolkit.react.expoimageapp")
|
|
89
|
+
|
|
90
|
+
set(component_name "com.amazon.kepler.uitoolkit.react.expoimageapp.so")
|
|
91
|
+
add_custom_command(
|
|
92
|
+
TARGET ${AUTO_LINK_PACKAGE_NAME}
|
|
93
|
+
POST_BUILD
|
|
94
|
+
COMMAND ${CMAKE_COMMAND}
|
|
95
|
+
ARGS -E copy $<TARGET_FILE:${AUTO_LINK_PACKAGE_NAME}> ${CMAKE_INSTALL_LIBDIR}/${component_name}
|
|
86
96
|
)
|
|
87
|
-
target_include_directories(${AUTO_LINK_PACKAGE_NAME}_exe PRIVATE ${SRC_DIR})
|
|
88
97
|
|
|
89
|
-
install(TARGETS ${AUTO_LINK_PACKAGE_NAME}
|
|
90
|
-
|
|
98
|
+
install(TARGETS ${AUTO_LINK_PACKAGE_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
99
|
+
|
|
100
|
+
# Create a dummy main for link-time symbol checking
|
|
101
|
+
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/main_stub.cpp "int main() { return 0; }")
|
|
102
|
+
|
|
103
|
+
# Helps in checking undefined references at build time
|
|
104
|
+
add_executable(${AUTO_LINK_PACKAGE_NAME}_exe
|
|
105
|
+
${CMAKE_CURRENT_BINARY_DIR}/main_stub.cpp
|
|
106
|
+
${SOURCES}
|
|
91
107
|
)
|
|
108
|
+
target_include_directories(${AUTO_LINK_PACKAGE_NAME}_exe PRIVATE ${SRC_DIR})
|
|
109
|
+
target_link_libraries(${AUTO_LINK_PACKAGE_NAME}_exe
|
|
110
|
+
PRIVATE
|
|
111
|
+
expo_image_idl
|
|
112
|
+
${LIBRARIES}
|
|
113
|
+
)
|
package/README.kepler.md
CHANGED
|
@@ -121,3 +121,4 @@ Check out the dedicated documentation page for info about this library, API refe
|
|
|
121
121
|
| Package version | Based on | @amazon-devices/react-native-kepler version |
|
|
122
122
|
| ---------------- | -------- | --------------------------------- |
|
|
123
123
|
| 2.0.x | expo-image v1.6.0 | 2.0.x |
|
|
124
|
+
| 2.0.x | expo-image v1.6.0 | 4.0.x+rn0.83.0 |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoImageModules.kepler.d.ts","sourceRoot":"","sources":["../src/ExpoImageModules.kepler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAsB,MAAM,oCAAoC,CAAC;AAI1F,KAAK,IAAI,GAAG,iBAAiB,CAAC;AAC9B,eAAO,MAAM,eAAe,0GAAqB,CAAC;AAClD,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"ExpoImageModules.kepler.d.ts","sourceRoot":"","sources":["../src/ExpoImageModules.kepler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAsB,MAAM,oCAAoC,CAAC;AAI1F,KAAK,IAAI,GAAG,iBAAiB,CAAC;AAC9B,eAAO,MAAM,eAAe,0GAAqB,CAAC;AAClD,eAAO,MAAM,eAAe,EAA+D,IAAI,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TurboModuleRegistry } from '@amazon-devices/keplerscript-turbomodule-api';
|
|
2
2
|
import ExpoImageComponent from './ImageViewNativeComponent';
|
|
3
3
|
export const NativeExpoImage = ExpoImageComponent;
|
|
4
|
-
export const ExpoImageModule = TurboModuleRegistry.getEnforcing('
|
|
4
|
+
export const ExpoImageModule = TurboModuleRegistry.getEnforcing('ExpoImageAppTM');
|
|
5
5
|
//# sourceMappingURL=ExpoImageModules.kepler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoImageModules.kepler.js","sourceRoot":"","sources":["../src/ExpoImageModules.kepler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,mBAAmB,EAAC,MAAM,oCAAoC,CAAC;AAE1F,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAG5D,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC,YAAY,CAAO,
|
|
1
|
+
{"version":3,"file":"ExpoImageModules.kepler.js","sourceRoot":"","sources":["../src/ExpoImageModules.kepler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,mBAAmB,EAAC,MAAM,oCAAoC,CAAC;AAE1F,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAG5D,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC,YAAY,CAAO,gBAAgB,CAAS,CAAC","sourcesContent":["import {KeplerTurboModule, TurboModuleRegistry} from '@amazon-devices/keplerscript-turbomodule-api';\n\nimport ExpoImageComponent from './ImageViewNativeComponent';\n\ntype Spec = KeplerTurboModule;\nexport const NativeExpoImage = ExpoImageComponent;\nexport const ExpoImageModule = TurboModuleRegistry.getEnforcing<Spec>('ExpoImageAppTM') as Spec;\n"]}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
import registerNativeComponent from './fabric/registerNativeComponent';
|
|
11
|
-
const ImageViewNativeComponent = registerNativeComponent('
|
|
11
|
+
const ImageViewNativeComponent = registerNativeComponent('ExpoImageAppComponent', {
|
|
12
12
|
validAttributes: {
|
|
13
13
|
placeholder: true,
|
|
14
14
|
pointerEvents: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageViewNativeComponent.js","sourceRoot":"","sources":["../src/ImageViewNativeComponent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,uBAAuB,MAAM,kCAAkC,CAAC;AAevE,MAAM,wBAAwB,GAAG,uBAAuB,CAAgC,
|
|
1
|
+
{"version":3,"file":"ImageViewNativeComponent.js","sourceRoot":"","sources":["../src/ImageViewNativeComponent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,uBAAuB,MAAM,kCAAkC,CAAC;AAevE,MAAM,wBAAwB,GAAG,uBAAuB,CAAgC,uBAAuB,EAAE;IAC/G,eAAe,EAAE;QACf,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,IAAI;QACrB,MAAM,EAAE,IAAI;QACZ,qBAAqB,EAAE,IAAI;QAC3B,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,IAAI;QACf,aAAa,EAAE,IAAI;QACnB,sBAAsB,EAAE,IAAI;QAC5B,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,IAAI;QACT,kBAAkB,EAAE,IAAI;QACxB,yBAAyB,EAAE,IAAI;QAC/B,gBAAgB,EAAE,IAAI;KACvB;CACF,CAAC,CAAC;AAEH,eAAe,wBAAwB,CAAC","sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict-local\n * @format\n */\n\nimport { NativeSyntheticEvent, ProcessedColorValue } from 'react-native';\n\nimport registerNativeComponent from './fabric/registerNativeComponent';\nimport {\n ImageNativeProps,\n ImageErrorEventData,\n ImageLoadEventData,\n ImageProgressEventData,\n} from './Image.types';\n\nexport type ImageViewNativeComponentProps = Omit<ImageNativeProps, 'tintColor' | 'onLoad' | 'onError' | 'onProgress'> & {\n tintColor: ProcessedColorValue | null | undefined;\n onLoad: (event: NativeSyntheticEvent<ImageLoadEventData>) => void;\n onError: (event: NativeSyntheticEvent<ImageErrorEventData>) => void;\n onProgress: (event: NativeSyntheticEvent<ImageProgressEventData>) => void;\n};\n\nconst ImageViewNativeComponent = registerNativeComponent<ImageViewNativeComponentProps>('ExpoImageAppComponent', {\n validAttributes: {\n placeholder: true,\n pointerEvents: true,\n resizeMode: true,\n contentFit: true,\n contentPosition: true,\n source: true,\n placeholderContentFit: true,\n transition: true,\n blurRadius: true,\n tintColor: true,\n priority: true,\n cachePolicy: true,\n responsivePolicy: true,\n recyclingKey: true,\n onLoadStart: true,\n onLoad: true,\n onProgress: true,\n onError: true,\n onLoadEnd: true,\n defaultSource: true,\n loadingIndicatorSource: true,\n fadeDuration: true,\n alt: true,\n accessibilityLabel: true,\n enableLiveTextInteraction: true,\n allowDownscaling: true,\n },\n});\n\nexport default ImageViewNativeComponent;\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
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 <Kepler/turbomodule/KeplerTurboModuleRegistration.h>
|
|
10
|
+
|
|
11
|
+
#include "ExpoImage/ExpoImageTurboModule.h"
|
|
12
|
+
|
|
13
|
+
extern "C" {
|
|
14
|
+
__attribute__((visibility("default"))) void autoLinkKeplerTurboModulesV1() noexcept {
|
|
15
|
+
KEPLER_REGISTER_TURBO_MODULE_WITH_NAME("ExpoImageAppTM", expoimage, ExpoImageTurboModule);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
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 <string_view>
|
|
12
|
+
|
|
13
|
+
namespace expoimage {
|
|
14
|
+
|
|
15
|
+
constexpr std::string_view kUri{"uri"};
|
|
16
|
+
constexpr std::string_view kWidth{"width"};
|
|
17
|
+
constexpr std::string_view kHeight{"height"};
|
|
18
|
+
constexpr std::string_view kPriority{"priority"};
|
|
19
|
+
constexpr std::string_view kCache{"cache"};
|
|
20
|
+
|
|
21
|
+
} // namespace expoimage
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#include "ExpoImageTurboModule.h"
|
|
2
|
+
#include "PrefetchListener.h"
|
|
3
|
+
#include "../ExpoImageComponent/ExpoImageStore.h"
|
|
4
|
+
|
|
5
|
+
#include <apmf/fn.h>
|
|
6
|
+
#include <apmf/iface/com/amazon/apmf/InvalidArgumentError.h>
|
|
7
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/graphics/IGraphicsModule.h>
|
|
8
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/graphics/ITask.h>
|
|
9
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/CacheType.h>
|
|
10
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IImageOptionsBuilder.h>
|
|
11
|
+
#include <apmf/log.h>
|
|
12
|
+
#include <apmf/process.h>
|
|
13
|
+
|
|
14
|
+
namespace expoimage {
|
|
15
|
+
|
|
16
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::graphics::IGraphicsModule;
|
|
17
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::view::CacheType;
|
|
18
|
+
|
|
19
|
+
APMF_DEFINE_LOGGER(ExpoImageTMLogger, "com.amazon.kepler.uitoolkit.react.expoimage.tm");
|
|
20
|
+
using namespace apmf::log_levels;
|
|
21
|
+
|
|
22
|
+
ExpoImageTurboModule::ExpoImageTurboModule() : KeplerTurboModule("ExpoImage") {
|
|
23
|
+
viewModule_ = apmf::GetProcessObject()
|
|
24
|
+
->getComponent("/com.amazon.kepler.uitoolkit.view")
|
|
25
|
+
.TryQueryInterface<IViewModule>();
|
|
26
|
+
if (!viewModule_) {
|
|
27
|
+
throw apmf::InvalidArgumentError("ExpoImage: failed to acquire IViewModule");
|
|
28
|
+
}
|
|
29
|
+
cacheManager_ = viewModule_->getImageCacheManager();
|
|
30
|
+
imageLoader_ = viewModule_->makeImageLoader();
|
|
31
|
+
if (!imageLoader_) {
|
|
32
|
+
APMF_LOG(ExpoImageTMLogger, WARNING)
|
|
33
|
+
<< "ExpoImage: IViewModule::makeImageLoader() returned null; "
|
|
34
|
+
"prefetch will resolve(false)";
|
|
35
|
+
}
|
|
36
|
+
if (!cacheManager_) {
|
|
37
|
+
APMF_LOG(ExpoImageTMLogger, WARNING)
|
|
38
|
+
<< "ExpoImage: IViewModule::getImageCacheManager() returned null; "
|
|
39
|
+
"clearMemoryCache / clearDiskCache will resolve(false)";
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
auto graphicsComponent = apmf::GetProcessObject()
|
|
43
|
+
->getComponent("/com.amazon.kepler.uitoolkit.graphics");
|
|
44
|
+
if (graphicsComponent) {
|
|
45
|
+
auto graphicsModule = graphicsComponent.TryQueryInterface<IGraphicsModule>();
|
|
46
|
+
if (graphicsModule) {
|
|
47
|
+
uiRunLoop_ = graphicsModule->tryGetUIRunLoop();
|
|
48
|
+
if (!uiRunLoop_) {
|
|
49
|
+
APMF_LOG(ExpoImageTMLogger, WARNING)
|
|
50
|
+
<< "ExpoImage: IGraphicsModule::tryGetUIRunLoop() returned null; "
|
|
51
|
+
"clearMemoryCache / clearDiskCache will resolve(false)";
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
APMF_LOG(ExpoImageTMLogger, WARNING)
|
|
55
|
+
<< "ExpoImage: failed to query IGraphicsModule from "
|
|
56
|
+
"/com.amazon.kepler.uitoolkit.graphics; clearMemoryCache / "
|
|
57
|
+
"clearDiskCache will resolve(false)";
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
APMF_LOG(ExpoImageTMLogger, WARNING)
|
|
61
|
+
<< "ExpoImage: /com.amazon.kepler.uitoolkit.graphics component is not "
|
|
62
|
+
"available; clearMemoryCache / clearDiskCache will resolve(false)";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void ExpoImageTurboModule::aggregateMethods(
|
|
67
|
+
MethodAggregator<KeplerTurboModule>& methodAggregator) const noexcept {
|
|
68
|
+
methodAggregator.addMethod("prefetch", 1, &ExpoImageTurboModule::prefetch);
|
|
69
|
+
methodAggregator.addMethod("clearMemoryCache", 0, &ExpoImageTurboModule::clearMemoryCache);
|
|
70
|
+
methodAggregator.addMethod("clearDiskCache", 0, &ExpoImageTurboModule::clearDiskCache);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
Promise ExpoImageTurboModule::prefetch(std::vector<std::string> urls) {
|
|
74
|
+
APMF_LOG(ExpoImageTMLogger, DEBUG)
|
|
75
|
+
<< "ExpoImageTurboModule::prefetch: count=" << urls.size();
|
|
76
|
+
return Promise([vm = viewModule_, loader = imageLoader_, urls = std::move(urls)](std::shared_ptr<Promise> promise) {
|
|
77
|
+
if (urls.empty()) {
|
|
78
|
+
promise->resolve(true);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (!loader) {
|
|
82
|
+
promise->resolve(false);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
auto listener = Ptr<PrefetchListener>::Make(urls.size(), [promise](bool success) {
|
|
86
|
+
promise->resolve(success);
|
|
87
|
+
});
|
|
88
|
+
auto options = vm->makeImageOptionsBuilder()->build();
|
|
89
|
+
for (const auto& url : urls) {
|
|
90
|
+
APMF_LOG(ExpoImageTMLogger, DEBUG)
|
|
91
|
+
<< "ExpoImageTurboModule::prefetch: url=" << url;
|
|
92
|
+
loader->prefetch(url, listener, options);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
Promise ExpoImageTurboModule::clearMemoryCache() {
|
|
98
|
+
APMF_LOG(ExpoImageTMLogger, DEBUG) << "ExpoImageTurboModule::clearMemoryCache";
|
|
99
|
+
return Promise([cm = cacheManager_, runLoop = uiRunLoop_](std::shared_ptr<Promise> promise) {
|
|
100
|
+
if (!runLoop || !cm) {
|
|
101
|
+
APMF_LOG(ExpoImageTMLogger, WARNING)
|
|
102
|
+
<< "ExpoImageTurboModule::clearMemoryCache: "
|
|
103
|
+
<< (!runLoop ? "uiRunLoop_" : "cacheManager_")
|
|
104
|
+
<< " is null (graphics module / view module unavailable at init); "
|
|
105
|
+
"resolving false";
|
|
106
|
+
promise->resolve(false);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
runLoop->scheduleTask(
|
|
110
|
+
apmf::Fn([cm, promise](apmf::method::execute) {
|
|
111
|
+
cm->clear(CacheType::MEMORY);
|
|
112
|
+
// also drop the expo-image decoded-image cache
|
|
113
|
+
// (the process-wide ExpoImageStore), which the framework
|
|
114
|
+
// IImageCacheManager does not know about. Safe here: this task
|
|
115
|
+
// runs on uiRunLoop_ and the store is UI-thread-owned.
|
|
116
|
+
expoimage::sharedExpoImageStore()->clear();
|
|
117
|
+
promise->resolve(true);
|
|
118
|
+
}),
|
|
119
|
+
nullptr,
|
|
120
|
+
nullptr,
|
|
121
|
+
false);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
Promise ExpoImageTurboModule::clearDiskCache() {
|
|
126
|
+
APMF_LOG(ExpoImageTMLogger, DEBUG) << "ExpoImageTurboModule::clearDiskCache";
|
|
127
|
+
return Promise([cm = cacheManager_, runLoop = uiRunLoop_](std::shared_ptr<Promise> promise) {
|
|
128
|
+
if (!runLoop || !cm) {
|
|
129
|
+
APMF_LOG(ExpoImageTMLogger, WARNING)
|
|
130
|
+
<< "ExpoImageTurboModule::clearDiskCache: "
|
|
131
|
+
<< (!runLoop ? "uiRunLoop_" : "cacheManager_")
|
|
132
|
+
<< " is null (graphics module / view module unavailable at init); "
|
|
133
|
+
"resolving false";
|
|
134
|
+
promise->resolve(false);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
runLoop->scheduleTask(
|
|
138
|
+
apmf::Fn([cm, promise](apmf::method::execute) {
|
|
139
|
+
cm->clear(CacheType::PERSISTENT);
|
|
140
|
+
promise->resolve(true);
|
|
141
|
+
}),
|
|
142
|
+
nullptr,
|
|
143
|
+
nullptr,
|
|
144
|
+
false);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
} // namespace expoimage
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/graphics/IRunLoop.h>
|
|
4
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IImageCacheManager.h>
|
|
5
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IImageLoader.h>
|
|
6
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IViewModule.h>
|
|
7
|
+
#include <apmf/ptr.h>
|
|
8
|
+
#include <Kepler/turbomodule/JSValue.h>
|
|
9
|
+
#include <Kepler/turbomodule/KeplerTurboModule.h>
|
|
10
|
+
#include <Kepler/turbomodule/Promise.h>
|
|
11
|
+
|
|
12
|
+
namespace expoimage {
|
|
13
|
+
|
|
14
|
+
using apmf::Ptr;
|
|
15
|
+
using com::amazon::kepler::turbomodule::JSArray;
|
|
16
|
+
using com::amazon::kepler::turbomodule::JSObject;
|
|
17
|
+
using com::amazon::kepler::turbomodule::KeplerTurboModule;
|
|
18
|
+
using com::amazon::kepler::turbomodule::MethodAggregator;
|
|
19
|
+
using com::amazon::kepler::turbomodule::Promise;
|
|
20
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::graphics::IRunLoop;
|
|
21
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::view::IImageCacheManager;
|
|
22
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::view::IImageLoader;
|
|
23
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::view::IViewModule;
|
|
24
|
+
|
|
25
|
+
class ExpoImageTurboModule : public KeplerTurboModule {
|
|
26
|
+
public:
|
|
27
|
+
ExpoImageTurboModule();
|
|
28
|
+
void aggregateMethods(MethodAggregator<KeplerTurboModule>& methodAggregator) const noexcept override;
|
|
29
|
+
|
|
30
|
+
Promise prefetch(std::vector<std::string> urls);
|
|
31
|
+
Promise clearMemoryCache();
|
|
32
|
+
Promise clearDiskCache();
|
|
33
|
+
|
|
34
|
+
private:
|
|
35
|
+
Ptr<IViewModule> viewModule_;
|
|
36
|
+
Ptr<IImageCacheManager> cacheManager_;
|
|
37
|
+
Ptr<IImageLoader> imageLoader_;
|
|
38
|
+
Ptr<IRunLoop> uiRunLoop_;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
} // namespace expoimage
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#include "PrefetchListener.h"
|
|
2
|
+
|
|
3
|
+
#include <apmf/log.h>
|
|
4
|
+
|
|
5
|
+
namespace expoimage {
|
|
6
|
+
|
|
7
|
+
APMF_DEFINE_LOGGER(PrefetchListenerLogger,
|
|
8
|
+
"com.amazon.kepler.uitoolkit.react.expoimage.prefetch");
|
|
9
|
+
using namespace apmf::log_levels;
|
|
10
|
+
|
|
11
|
+
PrefetchListener::PrefetchListener(size_t total, std::function<void(bool)> onFinish)
|
|
12
|
+
: total_(total), onFinish_(std::move(onFinish)) {}
|
|
13
|
+
|
|
14
|
+
void PrefetchListener::onStart(View<IImageLoadRequest>) {}
|
|
15
|
+
void PrefetchListener::onProgress(View<IImageLoadRequest>, float) {}
|
|
16
|
+
|
|
17
|
+
void PrefetchListener::onSuccess(View<IImageLoadRequest>, View<IImage>) {
|
|
18
|
+
// No counting — onPrefetchComplete handles prefetch completion.
|
|
19
|
+
// Both may fire for a single prefetch; counting here would double-count.
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
void PrefetchListener::onFailure(View<IImageLoadRequest>, ImageLoadError const& error) {
|
|
23
|
+
APMF_LOG(PrefetchListenerLogger, WARNING)
|
|
24
|
+
<< "PrefetchListener::onFailure: prefetch failed; resolving false";
|
|
25
|
+
if (!resolved_.exchange(true)) {
|
|
26
|
+
onFinish_(false);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
void PrefetchListener::onCanceled(View<IImageLoadRequest>) {
|
|
31
|
+
APMF_LOG(PrefetchListenerLogger, DEBUG)
|
|
32
|
+
<< "PrefetchListener::onCanceled: prefetch canceled; resolving false";
|
|
33
|
+
if (!resolved_.exchange(true)) {
|
|
34
|
+
onFinish_(false);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
void PrefetchListener::onPrefetchComplete(View<IImageLoadRequest>) {
|
|
39
|
+
APMF_LOG(PrefetchListenerLogger, DEBUG) << "PrefetchListener::onPrefetchComplete";
|
|
40
|
+
if (++loaded_ == total_ && !resolved_.exchange(true)) {
|
|
41
|
+
onFinish_(true);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
} // namespace expoimage
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <apmf/apmf_base.h>
|
|
4
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IImage.h>
|
|
5
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IImageLoadListener.h>
|
|
6
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IImageLoadRequest.h>
|
|
7
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/ImageLoadError.h>
|
|
8
|
+
#include <apmf/log.h>
|
|
9
|
+
#include <apmf/ptr.h>
|
|
10
|
+
|
|
11
|
+
#include <atomic>
|
|
12
|
+
#include <functional>
|
|
13
|
+
|
|
14
|
+
namespace expoimage {
|
|
15
|
+
|
|
16
|
+
using apmf::ApmfBase;
|
|
17
|
+
using apmf::View;
|
|
18
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::view::IImage;
|
|
19
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::view::IImageLoadListener;
|
|
20
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::view::IImageLoadRequest;
|
|
21
|
+
using apmf::iface::com::amazon::kepler::uitoolkit::view::ImageLoadError;
|
|
22
|
+
|
|
23
|
+
struct PrefetchListener : ApmfBase<PrefetchListener, IImageLoadListener> {
|
|
24
|
+
public:
|
|
25
|
+
PrefetchListener(size_t total, std::function<void(bool)> onFinish);
|
|
26
|
+
void onStart(View<IImageLoadRequest> request);
|
|
27
|
+
void onProgress(View<IImageLoadRequest> request, float progress);
|
|
28
|
+
void onSuccess(View<IImageLoadRequest> request, View<IImage> image);
|
|
29
|
+
void onFailure(View<IImageLoadRequest> request, ImageLoadError const& error);
|
|
30
|
+
void onCanceled(View<IImageLoadRequest> request);
|
|
31
|
+
void onPrefetchComplete(View<IImageLoadRequest> request);
|
|
32
|
+
|
|
33
|
+
private:
|
|
34
|
+
std::atomic<size_t> loaded_{0};
|
|
35
|
+
size_t total_;
|
|
36
|
+
std::atomic<bool> resolved_{false};
|
|
37
|
+
std::function<void(bool)> onFinish_;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
} // namespace expoimage
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#include "AccessibilityDelegate.h"
|
|
2
|
+
|
|
3
|
+
#include <apmf/iface/com/amazon/kepler/ucc/v1_0/common/Role.h>
|
|
4
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IHiddenTraitBuilder.h>
|
|
5
|
+
|
|
6
|
+
namespace expoimage {
|
|
7
|
+
|
|
8
|
+
namespace ucc = apmf::iface::com::amazon::kepler::ucc::v1_0::common;
|
|
9
|
+
|
|
10
|
+
void ExpoImageAccessibilityDelegate::build(
|
|
11
|
+
apmf::View<uiview::IAccessibilityContext> context,
|
|
12
|
+
apmf::View<uiview::IAccessibilityDelegate> defaultDelegate) {
|
|
13
|
+
if (!accessible_) {
|
|
14
|
+
context->setTrait(context->makeHiddenTraitBuilder()->build());
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (defaultDelegate) defaultDelegate->build(context, nullptr);
|
|
19
|
+
|
|
20
|
+
context->setRole(ucc::Role::IMAGE);
|
|
21
|
+
|
|
22
|
+
if (!description_.empty()) {
|
|
23
|
+
context->setDescription(description_);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
void ExpoImageAccessibilityDelegate::clear(
|
|
28
|
+
apmf::View<uiview::IAccessibilityContext> context,
|
|
29
|
+
apmf::View<uiview::IAccessibilityDelegate> defaultDelegate) {
|
|
30
|
+
if (defaultDelegate) defaultDelegate->clear(context, nullptr);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
} // namespace expoimage
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <apmf/apmf_base.h>
|
|
4
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IAccessibilityContext.h>
|
|
5
|
+
#include <apmf/iface/com/amazon/kepler/uitoolkit/view/IAccessibilityDelegate.h>
|
|
6
|
+
#include <apmf/ptr.h>
|
|
7
|
+
|
|
8
|
+
#include <string>
|
|
9
|
+
|
|
10
|
+
namespace expoimage {
|
|
11
|
+
|
|
12
|
+
using apmf::ApmfBase;
|
|
13
|
+
namespace uiview = apmf::iface::com::amazon::kepler::uitoolkit::view;
|
|
14
|
+
|
|
15
|
+
struct ExpoImageAccessibilityDelegate
|
|
16
|
+
: ApmfBase<ExpoImageAccessibilityDelegate, uiview::IAccessibilityDelegate> {
|
|
17
|
+
void build(apmf::View<uiview::IAccessibilityContext> context,
|
|
18
|
+
apmf::View<uiview::IAccessibilityDelegate> defaultDelegate);
|
|
19
|
+
void clear(apmf::View<uiview::IAccessibilityContext> context,
|
|
20
|
+
apmf::View<uiview::IAccessibilityDelegate> defaultDelegate);
|
|
21
|
+
|
|
22
|
+
void setDescription(const std::string& text) { description_ = text; }
|
|
23
|
+
void setAccessible(bool accessible) { accessible_ = accessible; }
|
|
24
|
+
|
|
25
|
+
private:
|
|
26
|
+
std::string description_;
|
|
27
|
+
bool accessible_{true};
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
} // namespace expoimage
|