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
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 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
35 CalcDimension sideLength;
36 if (!(ArkTSUtils::ParseJsDimensionVp(vm, secondArg, sideLength))) {
37 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockSideLength(nativeNode);
38 }
39 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockSideLength(
40 nativeNode, sideLength.Value(), static_cast<int8_t>(sideLength.Unit()));
41 return panda::JSValueRef::Undefined(vm);
42 }
43
ResetSideLength(ArkUIRuntimeCallInfo * runtimeCallInfo)44 ArkUINativeModuleValue PatternLockBridge::ResetSideLength(ArkUIRuntimeCallInfo* runtimeCallInfo)
45 {
46 EcmaVM* vm = runtimeCallInfo->GetVM();
47 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
48 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
49 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
50 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockSideLength(nativeNode);
51 return panda::JSValueRef::Undefined(vm);
52 }
53
SetAutoReset(ArkUIRuntimeCallInfo * runtimeCallInfo)54 ArkUINativeModuleValue PatternLockBridge::SetAutoReset(ArkUIRuntimeCallInfo* runtimeCallInfo)
55 {
56 EcmaVM* vm = runtimeCallInfo->GetVM();
57 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
58 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
59 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
60 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
61 uint32_t value = 1;
62 if (secondArg->IsBoolean()) {
63 value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
64 }
65 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockAutoReset(nativeNode, value);
66 return panda::JSValueRef::Undefined(vm);
67 }
68
ResetAutoReset(ArkUIRuntimeCallInfo * runtimeCallInfo)69 ArkUINativeModuleValue PatternLockBridge::ResetAutoReset(ArkUIRuntimeCallInfo* runtimeCallInfo)
70 {
71 EcmaVM* vm = runtimeCallInfo->GetVM();
72 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
73 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
74 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
75 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockAutoReset(nativeNode);
76 return panda::JSValueRef::Undefined(vm);
77 }
78
SetPathStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)79 ArkUINativeModuleValue PatternLockBridge::SetPathStrokeWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
80 {
81 EcmaVM* vm = runtimeCallInfo->GetVM();
82 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
83 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
84 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
85 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
86 CalcDimension strokeWidth;
87 if (!(ArkTSUtils::ParseJsDimensionVp(vm, secondArg, strokeWidth))) {
88 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockPathStrokeWidth(nativeNode);
89 }
90 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockPathStrokeWidth(
91 nativeNode, strokeWidth.Value(), static_cast<int8_t>(strokeWidth.Unit()));
92 return panda::JSValueRef::Undefined(vm);
93 }
94
ResetPathStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)95 ArkUINativeModuleValue PatternLockBridge::ResetPathStrokeWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
96 {
97 EcmaVM* vm = runtimeCallInfo->GetVM();
98 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
99 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
100 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
101 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockPathStrokeWidth(nativeNode);
102 return panda::JSValueRef::Undefined(vm);
103 }
104
SetRegularColor(ArkUIRuntimeCallInfo * runtimeCallInfo)105 ArkUINativeModuleValue PatternLockBridge::SetRegularColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
106 {
107 EcmaVM* vm = runtimeCallInfo->GetVM();
108 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
109 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
110 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
111 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
112 Color color;
113 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
114 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockRegularColor(nativeNode);
115 } else {
116 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockRegularColor(nativeNode, color.GetValue());
117 }
118 return panda::JSValueRef::Undefined(vm);
119 }
120
ResetRegularColor(ArkUIRuntimeCallInfo * runtimeCallInfo)121 ArkUINativeModuleValue PatternLockBridge::ResetRegularColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
122 {
123 EcmaVM* vm = runtimeCallInfo->GetVM();
124 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
125 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
126 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
127 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockRegularColor(nativeNode);
128 return panda::JSValueRef::Undefined(vm);
129 }
130
SetPathColor(ArkUIRuntimeCallInfo * runtimeCallInfo)131 ArkUINativeModuleValue PatternLockBridge::SetPathColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
132 {
133 EcmaVM* vm = runtimeCallInfo->GetVM();
134 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
135 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
136 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
137 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
138 Color color;
139 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
140 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockPathColor(nativeNode);
141 } else {
142 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockPathColor(nativeNode, color.GetValue());
143 }
144 return panda::JSValueRef::Undefined(vm);
145 }
146
ResetPathColor(ArkUIRuntimeCallInfo * runtimeCallInfo)147 ArkUINativeModuleValue PatternLockBridge::ResetPathColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
148 {
149 EcmaVM* vm = runtimeCallInfo->GetVM();
150 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
151 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
152 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
153 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockPathColor(nativeNode);
154 return panda::JSValueRef::Undefined(vm);
155 }
156
SetPatternLockActiveColor(ArkUIRuntimeCallInfo * runtimeCallInfo)157 ArkUINativeModuleValue PatternLockBridge::SetPatternLockActiveColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
158 {
159 EcmaVM* vm = runtimeCallInfo->GetVM();
160 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
161 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
162 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
163 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
164 Color color;
165 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
166 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveColor(nativeNode);
167 } else {
168 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockActiveColor(nativeNode, color.GetValue());
169 }
170 return panda::JSValueRef::Undefined(vm);
171 }
172
ResetPatternLockActiveColor(ArkUIRuntimeCallInfo * runtimeCallInfo)173 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockActiveColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
174 {
175 EcmaVM* vm = runtimeCallInfo->GetVM();
176 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
177 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
178 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
179 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveColor(nativeNode);
180 return panda::JSValueRef::Undefined(vm);
181 }
182
SetPatternLockCircleRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)183 ArkUINativeModuleValue PatternLockBridge::SetPatternLockCircleRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
184 {
185 EcmaVM* vm = runtimeCallInfo->GetVM();
186 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
187 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
188 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
189 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
190 CalcDimension circleRadius;
191 if (ArkTSUtils::ParseJsDimensionVp(vm, secondArg, circleRadius) && !(circleRadius.IsNonPositive())) {
192 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockCircleRadius(
193 nativeNode, circleRadius.Value(), static_cast<int8_t>(circleRadius.Unit()));
194 } else {
195 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockCircleRadius(nativeNode);
196 }
197 return panda::JSValueRef::Undefined(vm);
198 }
199
ResetPatternLockCircleRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)200 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockCircleRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
201 {
202 EcmaVM* vm = runtimeCallInfo->GetVM();
203 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
204 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
205 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
206 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockCircleRadius(nativeNode);
207 return panda::JSValueRef::Undefined(vm);
208 }
209
SetPatternLockSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)210 ArkUINativeModuleValue PatternLockBridge::SetPatternLockSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
211 {
212 EcmaVM* vm = runtimeCallInfo->GetVM();
213 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
214 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
215 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
216 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
217 Color color;
218 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
219 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockSelectedColor(nativeNode);
220 } else {
221 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockSelectedColor(nativeNode, color.GetValue());
222 }
223 return panda::JSValueRef::Undefined(vm);
224 }
225
ResetPatternLockSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)226 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
227 {
228 EcmaVM* vm = runtimeCallInfo->GetVM();
229 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
230 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
231 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
232 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockSelectedColor(nativeNode);
233 return panda::JSValueRef::Undefined(vm);
234 }
235
SetPatternLockActivateCircleStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)236 ArkUINativeModuleValue PatternLockBridge::SetPatternLockActivateCircleStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
237 {
238 EcmaVM* vm = runtimeCallInfo->GetVM();
239 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
240 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
241 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
242 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
243 if (!secondArg->IsObject(vm)) {
244 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleColor(nativeNode);
245 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleRadius(nativeNode);
246 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockEnableWaveEffect(nativeNode);
247 } else {
248 auto obj = secondArg->ToObject(vm);
249 auto jsColor = obj->Get(vm, panda::StringRef::NewFromUtf8(vm, "color"));
250 auto jsRadius = obj->Get(vm, panda::StringRef::NewFromUtf8(vm, "radius"));
251 auto jsEnable = obj->Get(vm, panda::StringRef::NewFromUtf8(vm, "enableWaveEffect"));
252 Color color;
253 if (!ArkTSUtils::ParseJsColorAlpha(vm, jsColor, color)) {
254 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleColor(nativeNode);
255 } else {
256 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockActiveCircleColor(
257 nativeNode, color.GetValue());
258 }
259 CalcDimension circleRadius;
260 if (jsRadius->IsObject(vm) && ArkTSUtils::ParseJsLengthMetrics(vm, jsRadius, circleRadius) &&
261 !(circleRadius.IsNonPositive())) {
262 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockActiveCircleRadius(
263 nativeNode, circleRadius.Value(), static_cast<int8_t>(circleRadius.Unit()));
264 } else {
265 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleRadius(nativeNode);
266 }
267 uint32_t value = 1;
268 if (jsEnable->IsBoolean()) {
269 value = static_cast<uint32_t>(jsEnable->ToBoolean(vm)->Value());
270 }
271 GetArkUINodeModifiers()->getPatternLockModifier()->setPatternLockEnableWaveEffect(nativeNode, value);
272 }
273 return panda::JSValueRef::Undefined(vm);
274 }
275
ResetPatternLockActivateCircleStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)276 ArkUINativeModuleValue PatternLockBridge::ResetPatternLockActivateCircleStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
277 {
278 EcmaVM* vm = runtimeCallInfo->GetVM();
279 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
280 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
281 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
282 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleColor(nativeNode);
283 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockActiveCircleRadius(nativeNode);
284 GetArkUINodeModifiers()->getPatternLockModifier()->resetPatternLockEnableWaveEffect(nativeNode);
285 return panda::JSValueRef::Undefined(vm);
286 }
287 } // namespace OHOS::Ace::NG
288