@react-native-ohos/react-native-safe-area-context 4.7.5-rc.1 → 4.7.5-rc.3
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/harmony/safe_area/oh-package.json5 +1 -1
- package/harmony/safe_area/src/main/cpp/SafeAreaManagerMap.cpp +53 -2
- package/harmony/safe_area/src/main/cpp/SafeAreaManagerMap.h +27 -0
- package/harmony/safe_area/src/main/cpp/SafeAreaProviderComponentInstance.cpp +2 -0
- package/harmony/safe_area/src/main/cpp/SafeAreaViewComponentInstance.cpp +36 -8
- package/harmony/safe_area/src/main/cpp/SafeAreaViewComponentInstance.h +7 -0
- package/harmony/safe_area.har +0 -0
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"name": "@react-native-ohos/react-native-safe-area-context",
|
|
9
9
|
"description": "Please describe the basic information.",
|
|
10
10
|
"main": "index.ets",
|
|
11
|
-
"version": "4.7.5-rc.
|
|
11
|
+
"version": "4.7.5-rc.3",
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@rnoh/react-native-openharmony": "file:../react_native_openharmony"
|
|
14
14
|
}
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
SafeAreaManagerMap::SafeAreaManagerMap()
|
|
28
28
|
{
|
|
29
29
|
}
|
|
30
|
+
|
|
30
31
|
SafeAreaManagerMap &SafeAreaManagerMap::getInstance()
|
|
31
32
|
{
|
|
32
33
|
static SafeAreaManagerMap instance;
|
|
@@ -41,6 +42,22 @@ void SafeAreaManagerMap::SetHasSafeAreaProviderByNodeHandle(ArkUI_NodeHandle nod
|
|
|
41
42
|
hasSafeAreaProviderMap_[nodeHandle] = isHasSafeAreaProvider;
|
|
42
43
|
}
|
|
43
44
|
|
|
45
|
+
void SafeAreaManagerMap::SetProviderTopByNodeHandle(ArkUI_NodeHandle nodeHandle, float y)
|
|
46
|
+
{
|
|
47
|
+
if (!nodeHandle) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
providerTopMap_[nodeHandle] = y;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void SafeAreaManagerMap::SetProviderBottomByNodeHandle(ArkUI_NodeHandle nodeHandle, float height)
|
|
54
|
+
{
|
|
55
|
+
if (!nodeHandle) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
providerBottomMap_[nodeHandle] = height;
|
|
59
|
+
}
|
|
60
|
+
|
|
44
61
|
bool SafeAreaManagerMap::GetHasSafeAreaProviderByNodeHandle(ArkUI_NodeHandle nodeHandle)
|
|
45
62
|
{
|
|
46
63
|
if (!nodeHandle) {
|
|
@@ -48,11 +65,35 @@ bool SafeAreaManagerMap::GetHasSafeAreaProviderByNodeHandle(ArkUI_NodeHandle nod
|
|
|
48
65
|
}
|
|
49
66
|
auto it = hasSafeAreaProviderMap_.find(nodeHandle);
|
|
50
67
|
if (it != hasSafeAreaProviderMap_.end()) {
|
|
51
|
-
|
|
68
|
+
return hasSafeAreaProviderMap_.at(nodeHandle);
|
|
52
69
|
}
|
|
53
70
|
return false;
|
|
54
71
|
}
|
|
55
72
|
|
|
73
|
+
float SafeAreaManagerMap::GetProviderTopByNodeHandle(ArkUI_NodeHandle nodeHandle)
|
|
74
|
+
{
|
|
75
|
+
if (!nodeHandle) {
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
auto it = providerTopMap_.find(nodeHandle);
|
|
79
|
+
if (it != providerTopMap_.end()) {
|
|
80
|
+
return providerTopMap_.at(nodeHandle);
|
|
81
|
+
}
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
float SafeAreaManagerMap::GetProviderBottomByNodeHandle(ArkUI_NodeHandle nodeHandle)
|
|
86
|
+
{
|
|
87
|
+
if (!nodeHandle) {
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
auto it = providerBottomMap_.find(nodeHandle);
|
|
91
|
+
if (it != providerBottomMap_.end()) {
|
|
92
|
+
return providerBottomMap_.at(nodeHandle);
|
|
93
|
+
}
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
|
|
56
97
|
void SafeAreaManagerMap::RemoveSafeAreaProviderByNodeHandle(ArkUI_NodeHandle nodeHandle)
|
|
57
98
|
{
|
|
58
99
|
if (!nodeHandle) {
|
|
@@ -60,6 +101,16 @@ void SafeAreaManagerMap::RemoveSafeAreaProviderByNodeHandle(ArkUI_NodeHandle nod
|
|
|
60
101
|
}
|
|
61
102
|
auto it = hasSafeAreaProviderMap_.find(nodeHandle);
|
|
62
103
|
if (it != hasSafeAreaProviderMap_.end()) {
|
|
63
|
-
|
|
104
|
+
hasSafeAreaProviderMap_.erase(nodeHandle);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
auto it2 = providerTopMap_.find(nodeHandle);
|
|
108
|
+
if (it2 != providerTopMap_.end()) {
|
|
109
|
+
providerTopMap_.erase(nodeHandle);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
auto it3 = providerBottomMap_.find(nodeHandle);
|
|
113
|
+
if (it3 != providerBottomMap_.end()) {
|
|
114
|
+
providerBottomMap_.erase(nodeHandle);
|
|
64
115
|
}
|
|
65
116
|
}
|
|
@@ -21,22 +21,49 @@
|
|
|
21
21
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
22
|
* SOFTWARE.
|
|
23
23
|
*/
|
|
24
|
+
|
|
24
25
|
#ifndef HARMONY_SAFEAREAMANAGERMAP_H
|
|
25
26
|
#define HARMONY_SAFEAREAMANAGERMAP_H
|
|
27
|
+
|
|
26
28
|
#include <arkui/native_type.h>
|
|
27
29
|
#include <unordered_map>
|
|
30
|
+
|
|
28
31
|
class SafeAreaManagerMap {
|
|
32
|
+
|
|
29
33
|
private:
|
|
34
|
+
|
|
30
35
|
SafeAreaManagerMap();
|
|
36
|
+
|
|
31
37
|
SafeAreaManagerMap(const SafeAreaManagerMap &) = delete;
|
|
38
|
+
|
|
32
39
|
SafeAreaManagerMap &operator=(const SafeAreaManagerMap &) = delete;
|
|
40
|
+
|
|
33
41
|
SafeAreaManagerMap(SafeAreaManagerMap &&) = delete;
|
|
42
|
+
|
|
34
43
|
SafeAreaManagerMap &operator=(SafeAreaManagerMap &&) = delete;
|
|
44
|
+
|
|
35
45
|
std::unordered_map<ArkUI_NodeHandle, bool> hasSafeAreaProviderMap_;
|
|
46
|
+
|
|
47
|
+
std::unordered_map<ArkUI_NodeHandle, float> providerTopMap_;
|
|
48
|
+
|
|
49
|
+
std::unordered_map<ArkUI_NodeHandle, float> providerBottomMap_;
|
|
50
|
+
|
|
36
51
|
public:
|
|
37
52
|
static SafeAreaManagerMap &getInstance();
|
|
53
|
+
|
|
38
54
|
void SetHasSafeAreaProviderByNodeHandle(ArkUI_NodeHandle nodeHandle, bool isHasSafeAreaProvider);
|
|
55
|
+
|
|
56
|
+
void SetProviderTopByNodeHandle(ArkUI_NodeHandle nodeHandle, float y);
|
|
57
|
+
|
|
58
|
+
float GetProviderTopByNodeHandle(ArkUI_NodeHandle nodeHandle);
|
|
59
|
+
|
|
60
|
+
void SetProviderBottomByNodeHandle(ArkUI_NodeHandle nodeHandle, float height);
|
|
61
|
+
|
|
62
|
+
float GetProviderBottomByNodeHandle(ArkUI_NodeHandle nodeHandle);
|
|
63
|
+
|
|
39
64
|
bool GetHasSafeAreaProviderByNodeHandle(ArkUI_NodeHandle nodeHandle);
|
|
65
|
+
|
|
40
66
|
void RemoveSafeAreaProviderByNodeHandle(ArkUI_NodeHandle nodeHandle);
|
|
41
67
|
};
|
|
68
|
+
|
|
42
69
|
#endif //HARMONY_SAFEAREAMANAGERMAP_H
|
|
@@ -72,6 +72,8 @@ namespace rnoh {
|
|
|
72
72
|
double providerRight = MAX(MIN(x + width - data.frame.width, 0) + data.insets.right, 0);
|
|
73
73
|
double providerBottom = MAX(MIN(y + height - data.frame.height, 0) + data.insets.bottom, 0);
|
|
74
74
|
double providerLeft = MAX(data.insets.left - x, 0);
|
|
75
|
+
SafeAreaManagerMap::getInstance().SetProviderTopByNodeHandle(m_stackNode.getArkUINodeHandle(), providerTop);
|
|
76
|
+
SafeAreaManagerMap::getInstance().SetProviderBottomByNodeHandle(m_stackNode.getArkUINodeHandle(), providerBottom);
|
|
75
77
|
facebook::react::RNCSafeAreaProviderEventEmitter::OnInsetsChangeInsets insets = {providerTop, providerRight,
|
|
76
78
|
providerBottom, providerLeft};
|
|
77
79
|
facebook::react::RNCSafeAreaProviderEventEmitter::OnInsetsChangeFrame frame = {x, y, width, height};
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
22
|
* SOFTWARE.
|
|
23
23
|
*/
|
|
24
|
+
#include <dlfcn.h>
|
|
24
25
|
#include "SafeAreaViewComponentInstance.h"
|
|
25
26
|
#include "TurboModuleRequest.h"
|
|
26
27
|
#include "SafeAreaManagerMap.h"
|
|
@@ -50,17 +51,40 @@ SafeAreaStackNode &SafeAreaViewComponentInstance::getLocalRootArkUINode() { retu
|
|
|
50
51
|
|
|
51
52
|
void SafeAreaViewComponentInstance::updateInsert(SharedConcreteProps p)
|
|
52
53
|
{
|
|
54
|
+
high_lib_handle = dlopen("libace_ndk.z.so", RTLD_LAZY);
|
|
55
|
+
if (high_lib_handle == NULL) {
|
|
56
|
+
DLOG(INFO) << "SafeAreaViewComponentInstance libace_ndk.z.so not existed";
|
|
57
|
+
TurboModuleRequest request;
|
|
58
|
+
safeArea::Event data = request.getTurboModuleData(this->m_deps);
|
|
59
|
+
facebook::react::RNCSafeAreaViewEventEmitter::OnSafeAreaValueChange inset = {data.insets.top, data.insets.right,
|
|
60
|
+
data.insets.bottom, data.insets.left};
|
|
61
|
+
m_eventEmitter->onSafeAreaValueChange(inset);
|
|
62
|
+
dlclose(high_lib_handle);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
getParentInPageTreeMethod = (ArkUI_NodeHandle(*)(ArkUI_NodeHandle))dlsym(high_lib_handle, "OH_ArkUI_NodeUtils_GetParentInPageTree");
|
|
67
|
+
bool isExisted = getParentInPageTreeMethod != NULL;
|
|
68
|
+
if (!isExisted) {
|
|
69
|
+
DLOG(INFO) << "SafeAreaViewComponentInstance OH_ArkUI_NodeUtils_GetParentInPageTree not existed";
|
|
70
|
+
TurboModuleRequest request;
|
|
71
|
+
safeArea::Event data = request.getTurboModuleData(this->m_deps);
|
|
72
|
+
facebook::react::RNCSafeAreaViewEventEmitter::OnSafeAreaValueChange inset = {data.insets.top, data.insets.right,
|
|
73
|
+
data.insets.bottom, data.insets.left};
|
|
74
|
+
m_eventEmitter->onSafeAreaValueChange(inset);
|
|
75
|
+
dlclose(high_lib_handle);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
53
78
|
auto parentNodeHandle = findParentNodeHandle(m_safeAreaViewStackNode.getArkUINodeHandle());
|
|
54
|
-
DLOG(INFO) << "SafeAreaViewComponentInstance findParentNodeHandle "
|
|
55
|
-
<< parentNodeHandle.nodeHandle << " hasSafeAreaProvider "
|
|
56
|
-
<< parentNodeHandle.hasSafeAreaProvider;
|
|
79
|
+
DLOG(INFO) << "SafeAreaViewComponentInstance findParentNodeHandle " << parentNodeHandle.nodeHandle << " hasSafeAreaProvider " << parentNodeHandle.hasSafeAreaProvider;
|
|
57
80
|
if (parentNodeHandle.hasSafeAreaProvider) {
|
|
58
81
|
TurboModuleRequest request;
|
|
59
82
|
safeArea::Event data = request.getTurboModuleData(this->m_deps);
|
|
60
|
-
facebook::react::RNCSafeAreaViewEventEmitter::OnSafeAreaValueChange inset = {
|
|
61
|
-
|
|
83
|
+
facebook::react::RNCSafeAreaViewEventEmitter::OnSafeAreaValueChange inset = {parentNodeHandle.providerTop, data.insets.right,
|
|
84
|
+
parentNodeHandle.providerBottom, data.insets.left};
|
|
62
85
|
m_eventEmitter->onSafeAreaValueChange(inset);
|
|
63
|
-
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
64
88
|
facebook::react::RNCSafeAreaViewEventEmitter::OnSafeAreaValueChange inset = {0, 0, 0, 0};
|
|
65
89
|
m_eventEmitter->onSafeAreaValueChange(inset);
|
|
66
90
|
}
|
|
@@ -70,16 +94,20 @@ SafeAreaViewComponentInstance::ParentNodeInfo SafeAreaViewComponentInstance::fin
|
|
|
70
94
|
ArkUI_NodeHandle nodehandle)
|
|
71
95
|
{
|
|
72
96
|
ParentNodeInfo parentNodeInfo;
|
|
73
|
-
if
|
|
97
|
+
if(!nodehandle) {
|
|
98
|
+
dlclose(high_lib_handle);
|
|
74
99
|
return parentNodeInfo;
|
|
75
100
|
}
|
|
76
|
-
auto parentNode
|
|
101
|
+
auto parentNode = getParentInPageTreeMethod(nodehandle);
|
|
77
102
|
bool hasSafeAreaProvider = SafeAreaManagerMap::getInstance().GetHasSafeAreaProviderByNodeHandle(parentNode);
|
|
78
103
|
parentNodeInfo.hasSafeAreaProvider = hasSafeAreaProvider;
|
|
79
104
|
parentNodeInfo.nodeHandle = parentNode;
|
|
80
105
|
if (!hasSafeAreaProvider && parentNode) {
|
|
81
106
|
return findParentNodeHandle(parentNode);
|
|
82
107
|
}
|
|
108
|
+
dlclose(high_lib_handle);
|
|
109
|
+
parentNodeInfo.providerTop = SafeAreaManagerMap::getInstance().GetProviderTopByNodeHandle(parentNode);
|
|
110
|
+
parentNodeInfo.providerBottom = SafeAreaManagerMap::getInstance().GetProviderBottomByNodeHandle(parentNode);
|
|
83
111
|
return parentNodeInfo;
|
|
84
112
|
}
|
|
85
113
|
|
|
@@ -38,11 +38,18 @@ namespace rnoh {
|
|
|
38
38
|
struct ParentNodeInfo {
|
|
39
39
|
ArkUI_NodeHandle nodeHandle = nullptr;
|
|
40
40
|
bool hasSafeAreaProvider = false;
|
|
41
|
+
float providerTop = 0;
|
|
42
|
+
float providerBottom = 0;
|
|
43
|
+
|
|
41
44
|
};
|
|
42
45
|
private:
|
|
43
46
|
SafeAreaStackNode m_safeAreaViewStackNode;
|
|
44
47
|
bool m_isFirstShow = true;
|
|
45
48
|
SharedConcreteProps m_SharedConcreteProps;
|
|
49
|
+
void *high_lib_handle = NULL;
|
|
50
|
+
ArkUI_NodeHandle (*getParentInPageTreeMethod)(ArkUI_NodeHandle node);
|
|
51
|
+
float providerTop = 0;
|
|
52
|
+
float providerBottom = 0;
|
|
46
53
|
public:
|
|
47
54
|
explicit SafeAreaViewComponentInstance(Context context);
|
|
48
55
|
void onChildInserted(ComponentInstance::Shared const &childComponentInstance,
|
package/harmony/safe_area.har
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-ohos/react-native-safe-area-context",
|
|
3
|
-
"version": "4.7.5-rc.
|
|
3
|
+
"version": "4.7.5-rc.3",
|
|
4
4
|
"description": "A flexible way to handle safe area, also works on Android and web.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|