• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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