• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "native_node.h"
18 #include "native_animate.h"
19 #include "node/animate_impl.h"
20 #include "node/dialog_model.h"
21 #include "node/gesture_impl.h"
22 #include "node/native_compatible.h"
23 #include "node/node_model.h"
24 #include "node_extened.h"
25 
26 #include "base/log/log_wrapper.h"
27 
28 namespace {
29 
30 constexpr int32_t CURRENT_NATIVE_NODE_API_VERSION = 1;
31 
32 ArkUI_NativeNodeAPI_Compatible nodeImpl_compatible = {
33     CURRENT_NATIVE_NODE_API_VERSION,
34     OHOS::Ace::NodeModel::CreateNode,
35     OHOS::Ace::NodeModel::DisposeNode,
36     OHOS::Ace::NodeModel::AddChild,
37     OHOS::Ace::NodeModel::RemoveChild,
38     OHOS::Ace::NodeModel::InsertChildAfter,
39     OHOS::Ace::NodeModel::InsertChildBefore,
40     OHOS::Ace::NodeModel::InsertChildAt,
41     OHOS::Ace::NodeModel::SetAttribute,
42     OHOS::Ace::NodeModel::GetAttribute,
43     OHOS::Ace::NodeModel::ResetAttribute,
44     OHOS::Ace::NodeModel::RegisterNodeEvent,
45     OHOS::Ace::NodeModel::UnregisterNodeEvent,
46     OHOS::Ace::NodeModel::RegisterOnEvent,
47     OHOS::Ace::NodeModel::UnregisterOnEvent,
48     OHOS::Ace::NodeModel::MarkDirty,
49 };
50 
51 ArkUI_NativeNodeAPI_1 nodeImpl_1 = {
52     CURRENT_NATIVE_NODE_API_VERSION,
53     OHOS::Ace::NodeModel::CreateNode,
54     OHOS::Ace::NodeModel::DisposeNode,
55     OHOS::Ace::NodeModel::AddChild,
56     OHOS::Ace::NodeModel::RemoveChild,
57     OHOS::Ace::NodeModel::InsertChildAfter,
58     OHOS::Ace::NodeModel::InsertChildBefore,
59     OHOS::Ace::NodeModel::InsertChildAt,
60     OHOS::Ace::NodeModel::SetAttribute,
61     OHOS::Ace::NodeModel::GetAttribute,
62     OHOS::Ace::NodeModel::ResetAttribute,
63     OHOS::Ace::NodeModel::RegisterNodeEvent,
64     OHOS::Ace::NodeModel::UnregisterNodeEvent,
65     OHOS::Ace::NodeModel::RegisterOnEvent,
66     OHOS::Ace::NodeModel::UnregisterOnEvent,
67     OHOS::Ace::NodeModel::MarkDirty,
68     OHOS::Ace::NodeModel::GetTotalChildCount,
69     OHOS::Ace::NodeModel::GetChildAt,
70     OHOS::Ace::NodeModel::GetFirstChild,
71     OHOS::Ace::NodeModel::GetLastChild,
72     OHOS::Ace::NodeModel::GetPreviousSibling,
73     OHOS::Ace::NodeModel::GetNextSibling,
74     OHOS::Ace::NodeModel::RegisterNodeCustomEvent,
75     OHOS::Ace::NodeModel::UnregisterNodeCustomEvent,
76     OHOS::Ace::NodeModel::RegisterNodeCustomReceiver,
77     OHOS::Ace::NodeModel::UnregisterNodeCustomEventReceiver,
78     OHOS::Ace::NodeModel::SetMeasuredSize,
79     OHOS::Ace::NodeModel::SetLayoutPosition,
80     OHOS::Ace::NodeModel::GetMeasuredSize,
81     OHOS::Ace::NodeModel::GetLayoutPosition,
82     OHOS::Ace::NodeModel::MeasureNode,
83     OHOS::Ace::NodeModel::LayoutNode,
84     OHOS::Ace::NodeModel::AddNodeEventReceiver,
85     OHOS::Ace::NodeModel::RemoveNodeEventReceiver,
86     OHOS::Ace::NodeModel::AddNodeCustomEventReceiver,
87     OHOS::Ace::NodeModel::RemoveNodeCustomEventReceiver,
88     OHOS::Ace::NodeModel::SetUserData,
89     OHOS::Ace::NodeModel::GetUserData,
90     OHOS::Ace::NodeModel::SetLengthMetricUnit,
91     OHOS::Ace::NodeModel::GetParent,
92     OHOS::Ace::NodeModel::RemoveAllChildren,
93 };
94 
95 ArkUI_NativeDialogAPI_1 dialogImpl_1 = {
96     OHOS::Ace::DialogModel::Create,
97     OHOS::Ace::DialogModel::Dispose,
98     OHOS::Ace::DialogModel::SetContent,
99     OHOS::Ace::DialogModel::RemoveContent,
100     OHOS::Ace::DialogModel::SetContentAlignment,
101     OHOS::Ace::DialogModel::ResetContentAlignment,
102     OHOS::Ace::DialogModel::SetModalMode,
103     OHOS::Ace::DialogModel::SetAutoCancel,
104     OHOS::Ace::DialogModel::SetMask,
105     OHOS::Ace::DialogModel::SetBackgroundColor,
106     OHOS::Ace::DialogModel::SetCornerRadius,
107     OHOS::Ace::DialogModel::SetGridColumnCount,
108     OHOS::Ace::DialogModel::EnableCustomStyle,
109     OHOS::Ace::DialogModel::EnableCustomAnimation,
110     OHOS::Ace::DialogModel::RegisterOnWillDismiss,
111     OHOS::Ace::DialogModel::Show,
112     OHOS::Ace::DialogModel::Close,
113     OHOS::Ace::DialogModel::RegisterOnWillDismissWithUserData,
114 };
115 
116 ArkUI_NativeDialogAPI_2 dialogImpl_2 = {
117     dialogImpl_1,
118     OHOS::Ace::DialogModel::SetKeyboardAvoidDistance,
119     OHOS::Ace::DialogModel::SetLevelMode,
120     OHOS::Ace::DialogModel::SetLevelUniqueId,
121     OHOS::Ace::DialogModel::SetImmersiveMode,
122 };
123 
124 constexpr int32_t CURRENT_NATIVE_GESTURE_API_VERSION = 1;
125 ArkUI_NativeGestureAPI_1 gestureImpl_1 = {
126     CURRENT_NATIVE_GESTURE_API_VERSION,
127     OHOS::Ace::GestureModel::CreateTapGesture,
128     OHOS::Ace::GestureModel::CreateLongPressGesture,
129     OHOS::Ace::GestureModel::CreatePanGesture,
130     OHOS::Ace::GestureModel::CreatePinchGesture,
131     OHOS::Ace::GestureModel::CreateRotationGesture,
132     OHOS::Ace::GestureModel::CreateSwipeGesture,
133     OHOS::Ace::GestureModel::CreateGroupGesture,
134     OHOS::Ace::GestureModel::DisposeGesture,
135     OHOS::Ace::GestureModel::AddChildGesture,
136     OHOS::Ace::GestureModel::RemoveChildGesture,
137     OHOS::Ace::GestureModel::SetGestureEventTarget,
138     OHOS::Ace::GestureModel::AddGestureToNode,
139     OHOS::Ace::GestureModel::RemoveGestureFromNode,
140     OHOS::Ace::GestureModel::SetGestureInterrupterToNode,
141     OHOS::Ace::GestureModel::GetGestureType,
142     OHOS::Ace::GestureModel::SetInnerGestureParallelTo,
143     OHOS::Ace::GestureModel::CreateTapGestureWithDistanceThreshold,
144 };
145 
146 ArkUI_NativeAnimateAPI_1 animateImpl_1 = {
147     OHOS::Ace::AnimateModel::AnimateTo,
148     OHOS::Ace::AnimateModel::KeyframeAnimateTo,
149     OHOS::Ace::AnimateModel::CreateAnimator,
150     OHOS::Ace::AnimateModel::DisposeAnimator,
151 };
152 
153 } // namespace
154 
155 #ifdef __cplusplus
156 extern "C" {
157 #endif
158 
OH_ArkUI_QueryModuleInterface(ArkUI_NativeAPIVariantKind type,int32_t version)159 void* OH_ArkUI_QueryModuleInterface(ArkUI_NativeAPIVariantKind type, int32_t version)
160 {
161     if (!OHOS::Ace::NodeModel::InitialFullImpl()) {
162         TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
163             "fail to get %{public}d node api family of %{public}d version, impl library is not found", type, version);
164         return nullptr;
165     }
166     switch (type) {
167         case ARKUI_NATIVE_NODE: {
168             switch (version) {
169                 case 0:
170                 case 1:
171                     return &nodeImpl_compatible;
172                 default: {
173                     TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
174                         "fail to get basic node api family, version is incorrect: %{public}d", version);
175                     return nullptr;
176                 }
177             }
178             break;
179         }
180         case ARKUI_NATIVE_DIALOG: {
181             switch (version) {
182                 case 0:
183                 case 1:
184                     return &dialogImpl_1;
185                 case 2:
186                     return &dialogImpl_2;
187                 default: {
188                     TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
189                         "fail to get dialog api family, version is incorrect: %{public}d", version);
190                     return nullptr;
191                 }
192             }
193         }
194         case ARKUI_NATIVE_GESTURE: {
195             switch (version) {
196                 case 0:
197                 case 1:
198                     return &gestureImpl_1;
199                 default: {
200                     TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
201                         "fail to get gesture api family, version is incorrect: %{public}d", version);
202                     return nullptr;
203                 }
204             }
205             break;
206         }
207         default: {
208             TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
209                 "fail to get %{public}d node api family, version is incorrect: %{public}d", type, version);
210             return nullptr;
211         }
212     }
213 }
214 
OH_ArkUI_GetNativeAPI(ArkUI_NativeAPIVariantKind type,int32_t version)215 void* OH_ArkUI_GetNativeAPI(ArkUI_NativeAPIVariantKind type, int32_t version)
216 {
217     return OH_ArkUI_QueryModuleInterface(type, version);
218 }
219 
OH_ArkUI_QueryModuleInterfaceByName(ArkUI_NativeAPIVariantKind type,const char * structName)220 void* OH_ArkUI_QueryModuleInterfaceByName(ArkUI_NativeAPIVariantKind type, const char* structName)
221 {
222     if (!OHOS::Ace::NodeModel::InitialFullImpl()) {
223         TAG_LOGE(OHOS::Ace::AceLogTag::ACE_NATIVE_NODE,
224             "fail to get %{public}d node api family, impl library is not found", type);
225         return nullptr;
226     }
227     switch (type) {
228         case ARKUI_NATIVE_NODE:
229             if (strcmp(structName, "ArkUI_NativeNodeAPI_1") == 0) {
230                 return &nodeImpl_1;
231             }
232             break;
233         case ARKUI_NATIVE_DIALOG:
234             if (strcmp(structName, "ArkUI_NativeDialogAPI_1") == 0) {
235                 return &dialogImpl_1;
236             } else if (strcmp(structName, "ArkUI_NativeDialogAPI_2") == 0) {
237                 return &dialogImpl_2;
238             }
239             break;
240         case ARKUI_NATIVE_GESTURE:
241             if (strcmp(structName, "ArkUI_NativeGestureAPI_1") == 0) {
242                 return &gestureImpl_1;
243             }
244             break;
245         case ARKUI_NATIVE_ANIMATE:
246             if (strcmp(structName, "ArkUI_NativeAnimateAPI_1") == 0) {
247                 return &animateImpl_1;
248             }
249             break;
250         default:
251             break;
252     }
253     return nullptr;
254 }
255 
256 #ifdef __cplusplus
257 };
258 #endif
259