1 /*
2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "native_interface.h"
17 #include "node/animate_impl.h"
18 #include "node/dialog_model.h"
19 #include "node/gesture_impl.h"
20 #include "node/node_model.h"
21 #include "node_extened.h"
22
23 #include "base/log/log_wrapper.h"
24
25 namespace {
26
27 constexpr int32_t CURRENT_NATIVE_NODE_API_VERSION = 1;
28
29 ArkUI_NativeNodeAPI_Compatible nodeImpl_compatible = {
30 CURRENT_NATIVE_NODE_API_VERSION,
31 OHOS::Ace::NodeModel::CreateNode,
32 OHOS::Ace::NodeModel::DisposeNode,
33 OHOS::Ace::NodeModel::AddChild,
34 OHOS::Ace::NodeModel::RemoveChild,
35 OHOS::Ace::NodeModel::InsertChildAfter,
36 OHOS::Ace::NodeModel::InsertChildBefore,
37 OHOS::Ace::NodeModel::InsertChildAt,
38 OHOS::Ace::NodeModel::SetAttribute,
39 OHOS::Ace::NodeModel::GetAttribute,
40 OHOS::Ace::NodeModel::ResetAttribute,
41 OHOS::Ace::NodeModel::RegisterNodeEvent,
42 OHOS::Ace::NodeModel::UnregisterNodeEvent,
43 OHOS::Ace::NodeModel::RegisterOnEvent,
44 OHOS::Ace::NodeModel::UnregisterOnEvent,
45 OHOS::Ace::NodeModel::MarkDirty,
46 };
47
48 ArkUI_NativeNodeAPI_1 nodeImpl_1 = {
49 CURRENT_NATIVE_NODE_API_VERSION,
50 OHOS::Ace::NodeModel::CreateNode,
51 OHOS::Ace::NodeModel::DisposeNode,
52 OHOS::Ace::NodeModel::AddChild,
53 OHOS::Ace::NodeModel::RemoveChild,
54 OHOS::Ace::NodeModel::InsertChildAfter,
55 OHOS::Ace::NodeModel::InsertChildBefore,
56 OHOS::Ace::NodeModel::InsertChildAt,
57 OHOS::Ace::NodeModel::SetAttribute,
58 OHOS::Ace::NodeModel::GetAttribute,
59 OHOS::Ace::NodeModel::ResetAttribute,
60 OHOS::Ace::NodeModel::RegisterNodeEvent,
61 OHOS::Ace::NodeModel::UnregisterNodeEvent,
62 OHOS::Ace::NodeModel::RegisterOnEvent,
63 OHOS::Ace::NodeModel::UnregisterOnEvent,
64 OHOS::Ace::NodeModel::MarkDirty,
65 OHOS::Ace::NodeModel::GetTotalChildCount,
66 OHOS::Ace::NodeModel::GetChildAt,
67 OHOS::Ace::NodeModel::GetFirstChild,
68 OHOS::Ace::NodeModel::GetLastChild,
69 OHOS::Ace::NodeModel::GetPreviousSibling,
70 OHOS::Ace::NodeModel::GetNextSibling,
71 OHOS::Ace::NodeModel::RegisterNodeCustomEvent,
72 OHOS::Ace::NodeModel::UnregisterNodeCustomEvent,
73 OHOS::Ace::NodeModel::RegisterNodeCustomReceiver,
74 OHOS::Ace::NodeModel::UnregisterNodeCustomEventReceiver,
75 OHOS::Ace::NodeModel::SetMeasuredSize,
76 OHOS::Ace::NodeModel::SetLayoutPosition,
77 OHOS::Ace::NodeModel::GetMeasuredSize,
78 OHOS::Ace::NodeModel::GetLayoutPosition,
79 OHOS::Ace::NodeModel::MeasureNode,
80 OHOS::Ace::NodeModel::LayoutNode,
81 OHOS::Ace::NodeModel::AddNodeEventReceiver,
82 OHOS::Ace::NodeModel::RemoveNodeEventReceiver,
83 OHOS::Ace::NodeModel::AddNodeCustomEventReceiver,
84 OHOS::Ace::NodeModel::RemoveNodeCustomEventReceiver,
85 OHOS::Ace::NodeModel::SetUserData,
86 OHOS::Ace::NodeModel::GetUserData,
87 OHOS::Ace::NodeModel::SetLengthMetricUnit,
88 OHOS::Ace::NodeModel::GetParent,
89 OHOS::Ace::NodeModel::RemoveAllChildren,
90 };
91
92 ArkUI_NativeDialogAPI_1 dialogImpl_1 = {
93 OHOS::Ace::DialogModel::Create,
94 OHOS::Ace::DialogModel::Dispose,
95 OHOS::Ace::DialogModel::SetContent,
96 OHOS::Ace::DialogModel::RemoveContent,
97 OHOS::Ace::DialogModel::SetContentAlignment,
98 OHOS::Ace::DialogModel::ResetContentAlignment,
99 OHOS::Ace::DialogModel::SetModalMode,
100 OHOS::Ace::DialogModel::SetAutoCancel,
101 OHOS::Ace::DialogModel::SetMask,
102 OHOS::Ace::DialogModel::SetBackgroundColor,
103 OHOS::Ace::DialogModel::SetCornerRadius,
104 OHOS::Ace::DialogModel::SetGridColumnCount,
105 OHOS::Ace::DialogModel::EnableCustomStyle,
106 OHOS::Ace::DialogModel::EnableCustomAnimation,
107 OHOS::Ace::DialogModel::RegisterOnWillDismiss,
108 OHOS::Ace::DialogModel::Show,
109 OHOS::Ace::DialogModel::Close,
110 OHOS::Ace::DialogModel::RegisterOnWillDismissWithUserData,
111 };
112
113 constexpr int32_t CURRENT_NATIVE_GESTURE_API_VERSION = 1;
114 ArkUI_NativeGestureAPI_1 gestureImpl_1 = {
115 CURRENT_NATIVE_GESTURE_API_VERSION,
116 OHOS::Ace::GestureModel::CreateTapGesture,
117 OHOS::Ace::GestureModel::CreateLongPressGesture,
118 OHOS::Ace::GestureModel::CreatePanGesture,
119 OHOS::Ace::GestureModel::CreatePinchGesture,
120 OHOS::Ace::GestureModel::CreateRotationGesture,
121 OHOS::Ace::GestureModel::CreateSwipeGesture,
122 OHOS::Ace::GestureModel::CreateGroupGesture,
123 OHOS::Ace::GestureModel::DisposeGesture,
124 OHOS::Ace::GestureModel::AddChildGesture,
125 OHOS::Ace::GestureModel::RemoveChildGesture,
126 OHOS::Ace::GestureModel::SetGestureEventTarget,
127 OHOS::Ace::GestureModel::AddGestureToNode,
128 OHOS::Ace::GestureModel::RemoveGestureFromNode,
129 OHOS::Ace::GestureModel::SetGestureInterrupterToNode,
130 OHOS::Ace::GestureModel::GetGestureType,
131 OHOS::Ace::GestureModel::SetInnerGestureParallelTo,
132 OHOS::Ace::GestureModel::CreateTapGestureWithDistanceThreshold,
133 };
134
135 ArkUI_NativeAnimateAPI_1 animateImpl_1 = {
136 OHOS::Ace::AnimateModel::AnimateTo,
137 OHOS::Ace::AnimateModel::KeyframeAnimateTo,
138 OHOS::Ace::AnimateModel::CreateAnimator,
139 OHOS::Ace::AnimateModel::DisposeAnimator,
140 };
141
142 } // namespace
143
144 #ifdef __cplusplus
145 extern "C" {
146 #endif
147
OH_ArkUI_QueryModuleInterface(ArkUI_NativeAPIVariantKind type, int32_t version)148 void* OH_ArkUI_QueryModuleInterface(ArkUI_NativeAPIVariantKind type, int32_t version)
149 {
150 if (!OHOS::Ace::NodeModel::InitialFullImpl()) {
151 TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
152 "fail to get %{public}d node api family of %{public}d version, impl library is not found", type, version);
153 return nullptr;
154 }
155 switch (type) {
156 case ARKUI_NATIVE_NODE: {
157 switch (version) {
158 case 0:
159 case 1:
160 return &nodeImpl_compatible;
161 default: {
162 TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
163 "fail to get basic node api family, version is incorrect: %{public}d", version);
164 return nullptr;
165 }
166 }
167 break;
168 }
169 case ARKUI_NATIVE_DIALOG: {
170 switch (version) {
171 case 0:
172 case 1:
173 return &dialogImpl_1;
174 default: {
175 TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
176 "fail to get dialog api family, version is incorrect: %{public}d", version);
177 return nullptr;
178 }
179 }
180 }
181 case ARKUI_NATIVE_GESTURE: {
182 switch (version) {
183 case 0:
184 case 1:
185 return &gestureImpl_1;
186 default: {
187 TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
188 "fail to get gesture api family, version is incorrect: %{public}d", version);
189 return nullptr;
190 }
191 }
192 break;
193 }
194 default: {
195 TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
196 "fail to get %{public}d node api family, version is incorrect: %{public}d", type, version);
197 return nullptr;
198 }
199 }
200 }
201
OH_ArkUI_GetNativeAPI(ArkUI_NativeAPIVariantKind type, int32_t version)202 void* OH_ArkUI_GetNativeAPI(ArkUI_NativeAPIVariantKind type, int32_t version)
203 {
204 return OH_ArkUI_QueryModuleInterface(type, version);
205 }
206
OH_ArkUI_QueryModuleInterfaceByName(ArkUI_NativeAPIVariantKind type, const char* structName)207 void* OH_ArkUI_QueryModuleInterfaceByName(ArkUI_NativeAPIVariantKind type, const char* structName)
208 {
209 if (!OHOS::Ace::NodeModel::InitialFullImpl()) {
210 TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
211 "fail to get %{public}d node api family, impl library is not found", type);
212 return nullptr;
213 }
214 switch (type) {
215 case ARKUI_NATIVE_NODE:
216 if (strcmp(structName, "ArkUI_NativeNodeAPI_1") == 0) {
217 return &nodeImpl_1;
218 }
219 break;
220 case ARKUI_NATIVE_DIALOG:
221 if (strcmp(structName, "ArkUI_NativeDialogAPI_1") == 0) {
222 return &dialogImpl_1;
223 }
224 break;
225 case ARKUI_NATIVE_GESTURE:
226 if (strcmp(structName, "ArkUI_NativeGestureAPI_1") == 0) {
227 return &gestureImpl_1;
228 }
229 break;
230 case ARKUI_NATIVE_ANIMATE:
231 if (strcmp(structName, "ArkUI_NativeAnimateAPI_1") == 0) {
232 return &animateImpl_1;
233 }
234 break;
235 default:
236 break;
237 }
238 return nullptr;
239 }
240
241 #ifdef __cplusplus
242 };
243 #endif
244