1 /*
2 * Copyright (c) 2023 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 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_pattern_lock_bridge.h"
16
17 #include "base/geometry/dimension.h"
18 #include "base/utils/utils.h"
19 #include "core/components/common/layout/constants.h"
20 #include "core/pipeline/pipeline_base.h"
21 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
22 #include "frameworks/core/components_v2/pattern_lock/pattern_lock_component.h"
23
24 namespace OHOS::Ace::NG {
25 constexpr int NUM_0 = 0;
26 constexpr int NUM_1 = 1;
27
SetSideLength(ArkUIRuntimeCallInfo * runtimeCallInfo)28 ArkUINativeModuleValue PatternLockBridge::SetSideLength(ArkUIRuntimeCallInfo* runtimeCallInfo)
29 {
30 EcmaVM* vm = runtimeCallInfo->GetVM();
31 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
32 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
33 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
34 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
35 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
36 CalcDimension sideLength;
37 if (!(ArkTSUtils::ParseJsDimensionVp(vm, secondArg, sideLength))) {
38 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockSideLength(nativeNode);
39 }
40 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockSideLength(
41 nativeNode, sideLength.Value(), static_cast<int8_t>(sideLength.Unit()));
42 return panda::JSValueRef::Undefined(vm);
43 }
44
ResetSideLength(ArkUIRuntimeCallInfo * runtimeCallInfo)45 ArkUINativeModuleValue PatternLockBridge::ResetSideLength(ArkUIRuntimeCallInfo* runtimeCallInfo)
46 {
47 EcmaVM* vm = runtimeCallInfo->GetVM();
48 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
49 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
50 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
51 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
52 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockSideLength(nativeNode);
53 return panda::JSValueRef::Undefined(vm);
54 }
55
SetAutoReset(ArkUIRuntimeCallInfo * runtimeCallInfo)56 ArkUINativeModuleValue PatternLockBridge::SetAutoReset(ArkUIRuntimeCallInfo* runtimeCallInfo)
57 {
58 EcmaVM* vm = runtimeCallInfo->GetVM();
59 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
60 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
61 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
62 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
63 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
64 uint32_t value = 1;
65 if (secondArg->IsBoolean()) {
66 value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
67 }
68 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockAutoReset(nativeNode, value);
69 return panda::JSValueRef::Undefined(vm);
70 }
71
ResetAutoReset(ArkUIRuntimeCallInfo * runtimeCallInfo)72 ArkUINativeModuleValue PatternLockBridge::ResetAutoReset(ArkUIRuntimeCallInfo* runtimeCallInfo)
73 {
74 EcmaVM* vm = runtimeCallInfo->GetVM();
75 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
76 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
77 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
78 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
79 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockAutoReset(nativeNode);
80 return panda::JSValueRef::Undefined(vm);
81 }
82
SetPathStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)83 ArkUINativeModuleValue PatternLockBridge::SetPathStrokeWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
84 {
85 EcmaVM* vm = runtimeCallInfo->GetVM();
86 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
87 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
88 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
89 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
90 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
91 CalcDimension strokeWidth;
92 if (!(ArkTSUtils::ParseJsDimensionVp(vm, secondArg, strokeWidth))) {
93 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockPathStrokeWidth(nativeNode);
94 }
95 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockPathStrokeWidth(
96 nativeNode, strokeWidth.Value(), static_cast<int8_t>(strokeWidth.Unit()));
97 return panda::JSValueRef::Undefined(vm);
98 }
99
ResetPathStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)100 ArkUINativeModuleValue PatternLockBridge::ResetPathStrokeWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
101 {
102 EcmaVM* vm = runtimeCallInfo->GetVM();
103 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
104 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
105 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
106 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
107 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockPathStrokeWidth(nativeNode);
108 return panda::JSValueRef::Undefined(vm);
109 }
110
SetRegularColor(ArkUIRuntimeCallInfo * runtimeCallInfo)111 ArkUINativeModuleValue PatternLockBridge::SetRegularColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
112 {
113 EcmaVM* vm = runtimeCallInfo->GetVM();
114 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
115 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
116 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
117 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
118 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
119 Color color;
120 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
121 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockRegularColor(nativeNode);
122 } else {
123 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockRegularColor(nativeNode, color.GetValue());
124 }
125 return panda::JSValueRef::Undefined(vm);
126 }
127
ResetRegularColor(ArkUIRuntimeCallInfo * runtimeCallInfo)128 ArkUINativeModuleValue PatternLockBridge::ResetRegularColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
129 {
130 EcmaVM* vm = runtimeCallInfo->GetVM();
131 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
132 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
133 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
134 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
135 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockRegularColor(nativeNode);
136 return panda::JSValueRef::Undefined(vm);
137 }
138
SetPathColor(ArkUIRuntimeCallInfo * runtimeCallInfo)139 ArkUINativeModuleValue PatternLockBridge::SetPathColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
140 {
141 EcmaVM* vm = runtimeCallInfo->GetVM();
142 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
143 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
144 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
145 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
146 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
147 Color color;
148 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
149 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockPathColor(nativeNode);
150 } else {
151 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockPathColor(nativeNode, color.GetValue());
152 }
153 return panda::JSValueRef::Undefined(vm);
154 }
155
ResetPathColor(ArkUIRuntimeCallInfo * runtimeCallInfo)156 ArkUINativeModuleValue PatternLockBridge::ResetPathColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
157 {
158 EcmaVM* vm = runtimeCallInfo->GetVM();
159 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
160 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
161 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
162 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
163 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockPathColor(nativeNode);
164 return panda::JSValueRef::Undefined(vm);
165 }
166
SetPatternLockActiveColor(ArkUIRuntimeCallInfo * runtimeCallInfo)167 ArkUINativeModuleValue PatternLockBridge::SetPatternLockActiveColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
168 {
169 EcmaVM* vm = runtimeCallInfo->GetVM();
170 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
171 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
172 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
173 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
174 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
175 Color color;
176 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
177 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveColor(nativeNode);
178 } else {
179 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockActiveColor(nativeNode, color.GetValue());
180 }
181 return panda::JSValueRef::Undefined(vm);
182 }
183
ResetPatternLockActiveColor(ArkUIRuntimeCallInfo * runtimeCallInfo)184 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockActiveColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
185 {
186 EcmaVM* vm = runtimeCallInfo->GetVM();
187 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
188 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
189 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
190 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
191 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveColor(nativeNode);
192 return panda::JSValueRef::Undefined(vm);
193 }
194
SetPatternLockCircleRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)195 ArkUINativeModuleValue PatternLockBridge::SetPatternLockCircleRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
196 {
197 EcmaVM* vm = runtimeCallInfo->GetVM();
198 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
199 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
200 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
201 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
202 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
203 CalcDimension circleRadius;
204 if (ArkTSUtils::ParseJsDimensionVp(vm, secondArg, circleRadius) && !(circleRadius.IsNonPositive())) {
205 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockCircleRadius(
206 nativeNode, circleRadius.Value(), static_cast<int8_t>(circleRadius.Unit()));
207 } else {
208 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockCircleRadius(nativeNode);
209 }
210 return panda::JSValueRef::Undefined(vm);
211 }
212
ResetPatternLockCircleRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)213 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockCircleRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
214 {
215 EcmaVM* vm = runtimeCallInfo->GetVM();
216 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
217 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
218 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
219 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
220 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockCircleRadius(nativeNode);
221 return panda::JSValueRef::Undefined(vm);
222 }
223
SetPatternLockSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)224 ArkUINativeModuleValue PatternLockBridge::SetPatternLockSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
225 {
226 EcmaVM* vm = runtimeCallInfo->GetVM();
227 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
228 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
229 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
230 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
231 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
232 Color color;
233 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
234 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockSelectedColor(nativeNode);
235 } else {
236 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockSelectedColor(nativeNode, color.GetValue());
237 }
238 return panda::JSValueRef::Undefined(vm);
239 }
240
ResetPatternLockSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)241 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
242 {
243 EcmaVM* vm = runtimeCallInfo->GetVM();
244 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
245 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
246 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
247 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
248 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockSelectedColor(nativeNode);
249 return panda::JSValueRef::Undefined(vm);
250 }
251
SetPatternLockActivateCircleStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)252 ArkUINativeModuleValue PatternLockBridge::SetPatternLockActivateCircleStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
253 {
254 EcmaVM* vm = runtimeCallInfo->GetVM();
255 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
256 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
257 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
258 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
259 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
260 if (!secondArg->IsObject(vm)) {
261 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleColor(nativeNode);
262 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleRadius(nativeNode);
263 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockEnableWaveEffect(nativeNode);
264 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockEnableForeground(nativeNode);
265 } else {
266 auto obj = secondArg->ToObject(vm);
267 auto jsColor = obj->Get(vm, panda::StringRef::NewFromUtf8(vm, "color"));
268 auto jsRadius = obj->Get(vm, panda::StringRef::NewFromUtf8(vm, "radius"));
269 auto jsEnable = obj->Get(vm, panda::StringRef::NewFromUtf8(vm, "enableWaveEffect"));
270 auto jsEnableForeground = obj->Get(vm, panda::StringRef::NewFromUtf8(vm, "enableForeground"));
271 Color color;
272 if (!ArkTSUtils::ParseJsColorAlpha(vm, jsColor, color)) {
273 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleColor(nativeNode);
274 } else {
275 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockActiveCircleColor(
276 nativeNode, color.GetValue());
277 }
278 CalcDimension circleRadius;
279 if (jsRadius->IsObject(vm) && ArkTSUtils::ParseJsLengthMetrics(vm, jsRadius, circleRadius) &&
280 !(circleRadius.IsNonPositive())) {
281 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockActiveCircleRadius(
282 nativeNode, circleRadius.Value(), static_cast<int8_t>(circleRadius.Unit()));
283 } else {
284 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleRadius(nativeNode);
285 }
286 uint32_t value = 1;
287 if (jsEnable->IsBoolean()) {
288 value = static_cast<uint32_t>(jsEnable->ToBoolean(vm)->Value());
289 }
290 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockEnableWaveEffect(nativeNode, value);
291 uint32_t enableForegroundValue = 0;
292 if (jsEnableForeground->IsBoolean()) {
293 enableForegroundValue = static_cast<uint32_t>(jsEnableForeground->ToBoolean(vm)->Value());
294 }
295 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockEnableForeground(
296 nativeNode, enableForegroundValue);
297 }
298 return panda::JSValueRef::Undefined(vm);
299 }
300
ResetPatternLockActivateCircleStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)301 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockActivateCircleStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
302 {
303 EcmaVM* vm = runtimeCallInfo->GetVM();
304 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
305 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
306 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
307 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
308 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleColor(nativeNode);
309 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleRadius(nativeNode);
310 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockEnableWaveEffect(nativeNode);
311 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockEnableForeground(nativeNode);
312 return panda::JSValueRef::Undefined(vm);
313 }
314
SetPatternLockSkipUnselectedPoint(ArkUIRuntimeCallInfo * runtimeCallInfo)315 ArkUINativeModuleValue PatternLockBridge::SetPatternLockSkipUnselectedPoint(ArkUIRuntimeCallInfo* runtimeCallInfo)
316 {
317 EcmaVM* vm = runtimeCallInfo->GetVM();
318 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
319 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
320 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
321 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
322 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
323 uint32_t value = 0;
324 if (secondArg->IsBoolean()) {
325 value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
326 }
327 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockSkipUnselectedPoint(nativeNode, value);
328 return panda::JSValueRef::Undefined(vm);
329 }
330
ResetPatternLockSkipUnselectedPoint(ArkUIRuntimeCallInfo * runtimeCallInfo)331 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockSkipUnselectedPoint(ArkUIRuntimeCallInfo* runtimeCallInfo)
332 {
333 EcmaVM* vm = runtimeCallInfo->GetVM();
334 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
335 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
336 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
337 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
338 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockSkipUnselectedPoint(nativeNode);
339 return panda::JSValueRef::Undefined(vm);
340 }
341
SetPatternLockOnPatternComplete(ArkUIRuntimeCallInfo * runtimeCallInfo)342 ArkUINativeModuleValue PatternLockBridge::SetPatternLockOnPatternComplete(ArkUIRuntimeCallInfo* runtimeCallInfo)
343 {
344 EcmaVM* vm = runtimeCallInfo->GetVM();
345 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
346 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
347 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
348 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
349 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
350 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockOnPatternComplete(nativeNode);
351 return panda::JSValueRef::Undefined(vm);
352 }
353 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
354 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
355 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
356 std::function<void(const BaseEventInfo* event)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
357 const BaseEventInfo* event) {
358 panda::LocalScope pandaScope(vm);
359 panda::TryCatch trycatch(vm);
360 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
361 const auto* eventInfo = TypeInfoHelper::DynamicCast<V2::PatternCompleteEvent>(event);
362 CHECK_NULL_VOID(eventInfo);
363 panda::Local<panda::JSValueRef> params[] = { ArkTSUtils::ChoosePointToJSValue(vm, eventInfo->GetInput()) };
364 func->Call(vm, func.ToLocal(), params, 1);
365 };
366 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockOnPatternComplete(
367 nativeNode, reinterpret_cast<void*>(&callback));
368 return panda::JSValueRef::Undefined(vm);
369 }
370
ResetPatternLockOnPatternComplete(ArkUIRuntimeCallInfo * runtimeCallInfo)371 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockOnPatternComplete(ArkUIRuntimeCallInfo* runtimeCallInfo)
372 {
373 EcmaVM* vm = runtimeCallInfo->GetVM();
374 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
375 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
376 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
377 CHECK_NULL_RETURN(nativeNode, panda::JSValueRef::Undefined(vm));
378 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockOnPatternComplete(nativeNode);
379 return panda::JSValueRef::Undefined(vm);
380 }
381
SetPatternLockOnDotConnect(ArkUIRuntimeCallInfo * runtimeCallInfo)382 ArkUINativeModuleValue PatternLockBridge::SetPatternLockOnDotConnect(ArkUIRuntimeCallInfo* runtimeCallInfo)
383 {
384 EcmaVM* vm = runtimeCallInfo->GetVM();
385 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
386 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
387 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
388 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
389 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
390 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockOnDotConnect(nativeNode);
391 return panda::JSValueRef::Undefined(vm);
392 }
393 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
394 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
395 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
396 std::function<void(int32_t code)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](int32_t code) {
397 panda::LocalScope pandaScope(vm);
398 panda::TryCatch trycatch(vm);
399 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
400 panda::Local<panda::JSValueRef> params = ArkTSUtils::ToJSValueWithVM(vm, code);
401 func->Call(vm, func.ToLocal(), ¶ms, 1);
402 };
403 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockOnDotConnect(
404 nativeNode, reinterpret_cast<void*>(&callback));
405 return panda::JSValueRef::Undefined(vm);
406 }
407
ResetPatternLockOnDotConnect(ArkUIRuntimeCallInfo * runtimeCallInfo)408 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockOnDotConnect(ArkUIRuntimeCallInfo* runtimeCallInfo)
409 {
410 EcmaVM* vm = runtimeCallInfo->GetVM();
411 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
412 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
413 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
414 CHECK_NULL_RETURN(nativeNode, panda::JSValueRef::Undefined(vm));
415 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockOnDotConnect(nativeNode);
416 return panda::JSValueRef::Undefined(vm);
417 }
418 } // namespace OHOS::Ace::NG
419