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 25namespace { 26 27constexpr int32_t CURRENT_NATIVE_NODE_API_VERSION = 1; 28 29ArkUI_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 48ArkUI_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 92ArkUI_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 113constexpr int32_t CURRENT_NATIVE_GESTURE_API_VERSION = 1; 114ArkUI_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 135ArkUI_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 145extern "C" { 146#endif 147 148void* 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 202void* OH_ArkUI_GetNativeAPI(ArkUI_NativeAPIVariantKind type, int32_t version) 203{ 204 return OH_ArkUI_QueryModuleInterface(type, version); 205} 206 207void* 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