1 /* 2 * Copyright (c) 2025 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 "button_gettype_test.h" 17 #include "../manager/plugin_manager.h" 18 #include <string> 19 20 namespace ArkUICapiTest 21 { 22 ArkUI_NodeHandle text1 = nullptr; createChildNode(ArkUI_NativeNodeAPI_1 * nodeAPI,bool enabled)23 static auto createChildNode(ArkUI_NativeNodeAPI_1 *nodeAPI, bool enabled) 24 { 25 auto nodeHandle = nodeAPI->createNode(ARKUI_NODE_BUTTON); 26 27 ArkUI_NumberValue enable_value[] = {{.i32 = enabled}}; 28 ArkUI_AttributeItem enable_item = {enable_value, sizeof(enable_value) / sizeof(ArkUI_NumberValue)}; 29 nodeAPI->setAttribute(nodeHandle, NODE_ENABLED, &enable_item); 30 31 ArkUI_NumberValue width_value[] = {{.f32 = SIZE_100}}; 32 ArkUI_AttributeItem width_item = {width_value, sizeof(width_value) / sizeof(ArkUI_NumberValue)}; 33 nodeAPI->setAttribute(nodeHandle, NODE_WIDTH, &width_item); 34 nodeAPI->setAttribute(nodeHandle, NODE_HEIGHT, &width_item); 35 36 ArkUI_AttributeItem LABEL_Item = {.string = "gettype"}; 37 nodeAPI->setAttribute(nodeHandle, NODE_BUTTON_LABEL, &LABEL_Item); 38 39 ArkUI_NumberValue margin_value[] = {{.f32 = DEFAULT_MARGIN}}; 40 ArkUI_AttributeItem margin_item = {margin_value, sizeof(margin_value) / sizeof(ArkUI_NumberValue)}; 41 nodeAPI->setAttribute(nodeHandle, NODE_MARGIN, &margin_item); 42 43 nodeAPI->registerNodeEvent(nodeHandle, NODE_ON_KEY_EVENT, 1, nullptr); 44 45 return nodeHandle; 46 } 47 OnEventReceive(ArkUI_NodeEvent * event)48 static void OnEventReceive(ArkUI_NodeEvent *event) 49 { 50 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "ButtonOnHoverTest", "OnEventReceive"); 51 if (event == nullptr) 52 { 53 OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "ButtonOnHoverTest", "OnEventReceive: event is null"); 54 return; 55 } 56 57 int32_t eventId = OH_ArkUI_NodeEvent_GetTargetId(event); 58 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "ButtonOnHoverTest", "OnEventReceive eventId: %{public}d", 59 eventId); 60 61 ArkUI_NativeNodeAPI_1 *nodeAPI = nullptr; 62 OH_ArkUI_GetModuleInterface(ARKUI_NATIVE_NODE, ArkUI_NativeNodeAPI_1, nodeAPI); 63 auto nodeHandler = OH_ArkUI_NodeEvent_GetNodeHandle(event); 64 auto uiEvent = OH_ArkUI_NodeEvent_GetInputEvent(event); 65 int32_t type = OH_ArkUI_UIInputEvent_GetType(uiEvent); 66 67 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "ButtonOnHoverTest", "OH_ArkUI_UIInputEvent_GetType: %{public}d", 68 type); 69 70 if (eventId == 1 && type == 4) 71 { 72 auto isText_ = "successed"; 73 ArkUI_AttributeItem item1 = {.string = isText_}; 74 nodeAPI->setAttribute(text1, NODE_TEXT_CONTENT, &item1); 75 } 76 } 77 CreateNativeNode(napi_env env,napi_callback_info info)78 napi_value ButtonGetTypeTest::CreateNativeNode(napi_env env, napi_callback_info info) 79 { 80 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "ButtonOnHoverEventTest", "CreateNativeNode"); 81 82 size_t argc = PARAM_1; 83 napi_value args[PARAM_1] = {nullptr}; 84 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 85 size_t length = PARAM_64; 86 size_t strLength = PARAM_0; 87 char xComponentID[PARAM_64] = {PARAM_0}; 88 napi_get_value_string_utf8(env, args[PARAM_0], xComponentID, length, &strLength); 89 90 if ((env == nullptr) || (info == nullptr)) 91 { 92 OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "ButtonOnHoverEventTest", 93 "GetContext env or info is null"); 94 return nullptr; 95 } 96 97 ArkUI_NativeNodeAPI_1 *nodeAPI = nullptr; 98 OH_ArkUI_GetModuleInterface(ARKUI_NATIVE_NODE, ArkUI_NativeNodeAPI_1, nodeAPI); 99 auto column = nodeAPI->createNode(ARKUI_NODE_COLUMN); 100 auto button = createChildNode(nodeAPI, true); 101 text1 = nodeAPI->createNode(ARKUI_NODE_TEXT); 102 103 ArkUI_AttributeItem item1 = {.string = "gettype"}; 104 nodeAPI->setAttribute(text1, NODE_TEXT_CONTENT, &item1); 105 106 ArkUI_AttributeItem id_item = {}; 107 id_item.string = "gettype"; 108 nodeAPI->setAttribute(text1, NODE_ID, &id_item); 109 110 nodeAPI->addChild(column, button); 111 nodeAPI->addChild(column, text1); 112 113 nodeAPI->registerNodeEventReceiver(&OnEventReceive); 114 115 std::string id(xComponentID); 116 if (OH_NativeXComponent_AttachNativeRootNode(PluginManager::GetInstance()->GetNativeXComponent(id), column) == INVALID_PARAM) 117 { 118 OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "ButtonOnHoverEventTest", 119 "OH_NativeXComponent_AttachNativeRootNode failed"); 120 } 121 122 napi_value exports; 123 if (napi_create_object(env, &exports) != napi_ok) 124 { 125 napi_throw_type_error(env, nullptr, "napi_create_object failed"); 126 return nullptr; 127 } 128 129 return exports; 130 } 131 } // namespace ArkUICapiTest