• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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(), &params, 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