1 /*
2 * Copyright (c) 2022-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
16 #include "core/components_ng/pattern/patternlock/patternlock_model_ng.h"
17
18 #include "core/common/resource/resource_parse_utils.h"
19 #include "core/components_ng/pattern/patternlock/patternlock_pattern.h"
20
21 namespace OHOS::Ace::NG {
22
Create()23 RefPtr<V2::PatternLockController> PatternLockModelNG::Create()
24 {
25 auto* stack = ViewStackProcessor::GetInstance();
26 int32_t nodeId = stack->ClaimNodeId();
27 ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", V2::PATTERN_LOCK_ETS_TAG, nodeId);
28 auto frameNode = FrameNode::GetOrCreateFrameNode(
29 V2::PATTERN_LOCK_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<PatternLockPattern>(); });
30 ViewStackProcessor::GetInstance()->Push(frameNode);
31
32 auto pattern = frameNode->GetPattern<PatternLockPattern>();
33 pattern->SetPatternLockController(AceType::MakeRefPtr<V2::PatternLockController>());
34 auto pros = frameNode->GetPaintProperty<PatternLockPaintProperty>();
35 if (pros) {
36 pros->ResetPathColorSetByUser();
37 pros->ResetRegularColorSetByUser();
38 pros->ResetActiveColorSetByUser();
39 pros->ResetSelectedColorSetByUser();
40 }
41 return pattern->GetPatternLockController();
42 }
43
SetPatternComplete(NG::PatternLockCompleteEvent && onComplete)44 void PatternLockModelNG::SetPatternComplete(NG::PatternLockCompleteEvent&& onComplete)
45 {
46 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
47 CHECK_NULL_VOID(frameNode);
48 auto eventHub = frameNode->GetOrCreateEventHub<PatternLockEventHub>();
49 CHECK_NULL_VOID(eventHub);
50 eventHub->SetOnComplete(std::move(onComplete));
51 }
52
SetDotConnect(std::function<void (int32_t)> && onDotConnect)53 void PatternLockModelNG::SetDotConnect(std::function<void(int32_t)>&& onDotConnect)
54 {
55 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
56 CHECK_NULL_VOID(frameNode);
57 auto eventHub = frameNode->GetOrCreateEventHub<PatternLockEventHub>();
58 CHECK_NULL_VOID(eventHub);
59 eventHub->SetOnDotConnect(std::move(onDotConnect));
60 }
61
SetSelectedColor(const Color & selectedColor)62 void PatternLockModelNG::SetSelectedColor(const Color& selectedColor)
63 {
64 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, SelectedColor, selectedColor);
65 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, SelectedColorSetByUser, true);
66 }
67
SetSelectedColorByUser(bool isByuserSet)68 void PatternLockModelNG::SetSelectedColorByUser(bool isByuserSet)
69 {
70 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, SelectedColorSetByUser, isByuserSet);
71 }
72
SetAutoReset(bool isAutoReset)73 void PatternLockModelNG::SetAutoReset(bool isAutoReset)
74 {
75 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, AutoReset, isAutoReset);
76 }
77
SetPathColor(const Color & pathColor)78 void PatternLockModelNG::SetPathColor(const Color& pathColor)
79 {
80 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, PathColor, pathColor);
81 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, PathColorSetByUser, true);
82 }
83
SetPathColorByUser(bool isByuserSet)84 void PatternLockModelNG::SetPathColorByUser(bool isByuserSet)
85 {
86 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, PathColorSetByUser, isByuserSet);
87 }
88
SetActiveColor(const Color & activeColor)89 void PatternLockModelNG::SetActiveColor(const Color& activeColor)
90 {
91 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveColor, activeColor);
92 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveColorSetByUser, true);
93 }
94
SetActiveColorByUser(bool isByuserSet)95 void PatternLockModelNG::SetActiveColorByUser(bool isByuserSet)
96 {
97 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveColorSetByUser, isByuserSet);
98 }
99
SetRegularColor(const Color & regularColor)100 void PatternLockModelNG::SetRegularColor(const Color& regularColor)
101 {
102 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, RegularColor, regularColor);
103 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, RegularColorSetByUser, true);
104 }
105
SetRegularColorByUser(bool isByuserSet)106 void PatternLockModelNG::SetRegularColorByUser(bool isByuserSet)
107 {
108 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, RegularColorSetByUser, isByuserSet);
109 }
110
SetCircleRadius(const Dimension & radius)111 void PatternLockModelNG::SetCircleRadius(const Dimension& radius)
112 {
113 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, CircleRadius, radius);
114 }
115
SetSideLength(const Dimension & sideLength)116 void PatternLockModelNG::SetSideLength(const Dimension& sideLength)
117 {
118 ACE_UPDATE_LAYOUT_PROPERTY(PatternLockLayoutProperty, SideLength, sideLength);
119 }
120
SetStrokeWidth(const Dimension & lineWidth)121 void PatternLockModelNG::SetStrokeWidth(const Dimension& lineWidth)
122 {
123 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, PathStrokeWidth, lineWidth);
124 }
125
SetActiveCircleColor(const Color & activeCircleColor)126 void PatternLockModelNG::SetActiveCircleColor(const Color& activeCircleColor)
127 {
128 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveCircleColor, activeCircleColor);
129 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveCircleColorSetByUser, true);
130 }
131
SetActiveCircleColorByUser(bool isByuserSet)132 void PatternLockModelNG::SetActiveCircleColorByUser(bool isByuserSet)
133 {
134 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveCircleColorSetByUser, isByuserSet);
135 }
136
137
SetActiveCircleRadius(const Dimension & activeCircleRadius)138 void PatternLockModelNG::SetActiveCircleRadius(const Dimension& activeCircleRadius)
139 {
140 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveCircleRadius, activeCircleRadius);
141 }
142
SetEnableWaveEffect(bool enableWaveEffect)143 void PatternLockModelNG::SetEnableWaveEffect(bool enableWaveEffect)
144 {
145 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, EnableWaveEffect, enableWaveEffect);
146 }
147
SetEnableForeground(bool enableForeground)148 void PatternLockModelNG::SetEnableForeground(bool enableForeground)
149 {
150 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, EnableForeground, enableForeground);
151 }
152
SetSkipUnselectedPoint(bool isSkipUnselectedPoint)153 void PatternLockModelNG::SetSkipUnselectedPoint(bool isSkipUnselectedPoint)
154 {
155 ACE_UPDATE_PAINT_PROPERTY(PatternLockPaintProperty, SkipUnselectedPoint, isSkipUnselectedPoint);
156 }
157
SetActiveColor(FrameNode * frameNode,const Color & activeColor)158 void PatternLockModelNG::SetActiveColor(FrameNode* frameNode, const Color& activeColor)
159 {
160 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveColor, activeColor, frameNode);
161 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveColorSetByUser, true, frameNode);
162 }
163
SetActiveColorByUser(FrameNode * frameNode,bool isByuserSet)164 void PatternLockModelNG::SetActiveColorByUser(FrameNode* frameNode, bool isByuserSet)
165 {
166 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveColorSetByUser, isByuserSet, frameNode);
167 }
168
SetCircleRadius(FrameNode * frameNode,const Dimension & radius)169 void PatternLockModelNG::SetCircleRadius(FrameNode* frameNode, const Dimension& radius)
170 {
171 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, CircleRadius, radius, frameNode);
172 }
173
SetSelectedColor(FrameNode * frameNode,const Color & selectedColor)174 void PatternLockModelNG::SetSelectedColor(FrameNode* frameNode, const Color& selectedColor)
175 {
176 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, SelectedColor, selectedColor, frameNode);
177 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, SelectedColorSetByUser, true, frameNode);
178 }
179
SetSelectedColorByUser(FrameNode * frameNode,bool isByuserSet)180 void PatternLockModelNG::SetSelectedColorByUser(FrameNode* frameNode, bool isByuserSet)
181 {
182 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, SelectedColorSetByUser, isByuserSet, frameNode);
183 }
184
SetSideLength(FrameNode * frameNode,const Dimension & sideLength)185 void PatternLockModelNG::SetSideLength(FrameNode* frameNode, const Dimension& sideLength)
186 {
187 ACE_UPDATE_NODE_LAYOUT_PROPERTY(PatternLockLayoutProperty, SideLength, sideLength, frameNode);
188 }
189
SetAutoReset(FrameNode * frameNode,bool isAutoReset)190 void PatternLockModelNG::SetAutoReset(FrameNode* frameNode, bool isAutoReset)
191 {
192 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, AutoReset, isAutoReset, frameNode);
193 }
194
SetStrokeWidth(FrameNode * frameNode,const Dimension & lineWidth)195 void PatternLockModelNG::SetStrokeWidth(FrameNode* frameNode, const Dimension& lineWidth)
196 {
197 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, PathStrokeWidth, lineWidth, frameNode);
198 }
199
SetRegularColor(FrameNode * frameNode,const Color & regularColor)200 void PatternLockModelNG::SetRegularColor(FrameNode* frameNode, const Color& regularColor)
201 {
202 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, RegularColor, regularColor, frameNode);
203 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, RegularColorSetByUser, true, frameNode);
204 }
205
SetRegularColorByUser(FrameNode * frameNode,bool isByuserSet)206 void PatternLockModelNG::SetRegularColorByUser(FrameNode* frameNode, bool isByuserSet)
207 {
208 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, RegularColorSetByUser, isByuserSet, frameNode);
209 }
210
SetPathColor(FrameNode * frameNode,const Color & pathColor)211 void PatternLockModelNG::SetPathColor(FrameNode* frameNode, const Color& pathColor)
212 {
213 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, PathColor, pathColor, frameNode);
214 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, PathColorSetByUser, true, frameNode);
215 }
216
SetPathColorByUser(FrameNode * frameNode,bool isByuserSet)217 void PatternLockModelNG::SetPathColorByUser(FrameNode* frameNode, bool isByuserSet)
218 {
219 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, PathColorSetByUser, isByuserSet, frameNode);
220 }
221
SetActiveCircleColor(FrameNode * frameNode,const Color & activeCircleColor)222 void PatternLockModelNG::SetActiveCircleColor(FrameNode* frameNode, const Color& activeCircleColor)
223 {
224 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveCircleColor, activeCircleColor, frameNode);
225 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveCircleColorSetByUser, true, frameNode);
226 }
227
SetActiveCircleColorByUser(FrameNode * frameNode,bool isByuserSet)228 void PatternLockModelNG::SetActiveCircleColorByUser(FrameNode* frameNode, bool isByuserSet)
229 {
230 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveCircleColorSetByUser, isByuserSet, frameNode);
231 }
232
233
SetActiveCircleRadius(FrameNode * frameNode,const Dimension & activeCircleRadius)234 void PatternLockModelNG::SetActiveCircleRadius(FrameNode* frameNode, const Dimension& activeCircleRadius)
235 {
236 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, ActiveCircleRadius, activeCircleRadius, frameNode);
237 }
238
SetEnableWaveEffect(FrameNode * frameNode,bool enableWaveEffect)239 void PatternLockModelNG::SetEnableWaveEffect(FrameNode* frameNode, bool enableWaveEffect)
240 {
241 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, EnableWaveEffect, enableWaveEffect, frameNode);
242 }
243
SetEnableForeground(FrameNode * frameNode,bool enableForeground)244 void PatternLockModelNG::SetEnableForeground(FrameNode* frameNode, bool enableForeground)
245 {
246 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, EnableForeground, enableForeground, frameNode);
247 }
248
SetSkipUnselectedPoint(FrameNode * frameNode,bool isSkipUnselectedPoint)249 void PatternLockModelNG::SetSkipUnselectedPoint(FrameNode* frameNode, bool isSkipUnselectedPoint)
250 {
251 ACE_UPDATE_NODE_PAINT_PROPERTY(PatternLockPaintProperty, SkipUnselectedPoint, isSkipUnselectedPoint, frameNode);
252 }
253
SetPatternComplete(FrameNode * frameNode,NG::PatternLockCompleteEvent && onComplete)254 void PatternLockModelNG::SetPatternComplete(FrameNode* frameNode, NG::PatternLockCompleteEvent&& onComplete)
255 {
256 CHECK_NULL_VOID(frameNode);
257 auto eventHub = frameNode->GetOrCreateEventHub<PatternLockEventHub>();
258 CHECK_NULL_VOID(eventHub);
259 eventHub->SetOnComplete(std::move(onComplete));
260 }
SetDotConnect(FrameNode * frameNode,std::function<void (int32_t)> && onDotConnect)261 void PatternLockModelNG::SetDotConnect(FrameNode* frameNode, std::function<void(int32_t)>&& onDotConnect)
262 {
263 CHECK_NULL_VOID(frameNode);
264 auto eventHub = frameNode->GetOrCreateEventHub<PatternLockEventHub>();
265 CHECK_NULL_VOID(eventHub);
266 eventHub->SetOnDotConnect(std::move(onDotConnect));
267 }
268
CreateWithResourceObj(PatternLockResourceType PatternLockResourceType,const RefPtr<ResourceObject> & resObj)269 void PatternLockModelNG::CreateWithResourceObj(
270 PatternLockResourceType PatternLockResourceType, const RefPtr<ResourceObject>& resObj)
271 {
272 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
273 CHECK_NULL_VOID(frameNode);
274 CreateWithResourceObj(frameNode, PatternLockResourceType, resObj);
275 }
276
CreateWithResourceObj(FrameNode * frameNode,PatternLockResourceType PatternLockResourceType,const RefPtr<ResourceObject> & resObj)277 void PatternLockModelNG::CreateWithResourceObj(
278 FrameNode* frameNode, PatternLockResourceType PatternLockResourceType, const RefPtr<ResourceObject>& resObj)
279 {
280 switch (PatternLockResourceType) {
281 case PatternLockResourceType::SELECTEDCOLOR:
282 HandleSelectedColorResource(frameNode, resObj);
283 break;
284 case PatternLockResourceType::PATHCOLOR:
285 HandlePathColorResource(frameNode, resObj);
286 break;
287 case PatternLockResourceType::ACTIVECOLOR:
288 HandleActiveColorResource(frameNode, resObj);
289 break;
290 case PatternLockResourceType::REGULARCOLOR:
291 HandleRegularColorResource(frameNode, resObj);
292 break;
293 case PatternLockResourceType::CIRCLERADIUS:
294 HandleCircleRadiusResource(frameNode, resObj);
295 break;
296 case PatternLockResourceType::SIDELENGTH:
297 HandleSideLengthResource(frameNode, resObj);
298 break;
299 case PatternLockResourceType::ACTIVECIRCLECOLOR:
300 HandleActiveCircleColorResource(frameNode, resObj);
301 break;
302 default:
303 break;
304 }
305 }
306
HandleSelectedColorResource(FrameNode * frameNode,const RefPtr<ResourceObject> & resObj)307 void PatternLockModelNG::HandleSelectedColorResource(FrameNode* frameNode, const RefPtr<ResourceObject>& resObj)
308 {
309 auto pattern = frameNode->GetPattern<PatternLockPattern>();
310 CHECK_NULL_VOID(pattern);
311 std::string key = "patternLock.selectedColor";
312 pattern->RemoveResObj(key);
313 CHECK_NULL_VOID(resObj);
314 auto&& updateFunc = [weak = AceType::WeakClaim(AceType::RawPtr(pattern)), key](
315 const RefPtr<ResourceObject>& resObj, bool isFristLoad = false) {
316 auto pattern = weak.Upgrade();
317 CHECK_NULL_VOID(pattern);
318 std::string color = pattern->GetResCacheMapByKey(key);
319 Color result;
320 if (!ResourceParseUtils::ParseResColor(resObj, result)) {
321 auto pipeline = PipelineBase::GetCurrentContext();
322 CHECK_NULL_VOID(pipeline);
323 auto theme = pipeline->GetTheme<V2::PatternLockTheme>();
324 CHECK_NULL_VOID(theme);
325 result = theme->GetSelectedColor();
326 }
327 pattern->UpdateSelectedColor(result, isFristLoad);
328 };
329 pattern->AddResObj(key, resObj, std::move(updateFunc));
330 }
331
HandlePathColorResource(FrameNode * frameNode,const RefPtr<ResourceObject> & resObj)332 void PatternLockModelNG::HandlePathColorResource(FrameNode* frameNode, const RefPtr<ResourceObject>& resObj)
333 {
334 auto pattern = frameNode->GetPattern<PatternLockPattern>();
335 CHECK_NULL_VOID(pattern);
336 std::string key = "patternLock.pathColor";
337 pattern->RemoveResObj(key);
338 CHECK_NULL_VOID(resObj);
339 auto&& updateFunc = [weak = AceType::WeakClaim(AceType::RawPtr(pattern)), key](
340 const RefPtr<ResourceObject>& resObj, bool isFristLoad = false) {
341 auto pattern = weak.Upgrade();
342 CHECK_NULL_VOID(pattern);
343 std::string color = pattern->GetResCacheMapByKey(key);
344 Color result;
345 if (!ResourceParseUtils::ParseResColor(resObj, result)) {
346 auto pipeline = PipelineBase::GetCurrentContext();
347 CHECK_NULL_VOID(pipeline);
348 auto theme = pipeline->GetTheme<V2::PatternLockTheme>();
349 CHECK_NULL_VOID(theme);
350 result = theme->GetPathColor();
351 }
352 pattern->UpdatePathColor(result, isFristLoad);
353 };
354 pattern->AddResObj(key, resObj, std::move(updateFunc));
355 }
356
HandleActiveColorResource(FrameNode * frameNode,const RefPtr<ResourceObject> & resObj)357 void PatternLockModelNG::HandleActiveColorResource(FrameNode* frameNode, const RefPtr<ResourceObject>& resObj)
358 {
359 auto pattern = frameNode->GetPattern<PatternLockPattern>();
360 CHECK_NULL_VOID(pattern);
361 std::string key = "patternLock.activeColor";
362 pattern->RemoveResObj(key);
363 CHECK_NULL_VOID(resObj);
364 auto&& updateFunc = [weak = AceType::WeakClaim(AceType::RawPtr(pattern)), key](
365 const RefPtr<ResourceObject>& resObj, bool isFristLoad = false) {
366 auto pattern = weak.Upgrade();
367 CHECK_NULL_VOID(pattern);
368 std::string color = pattern->GetResCacheMapByKey(key);
369 Color result;
370 if (!ResourceParseUtils::ParseResColor(resObj, result)) {
371 auto pipeline = PipelineBase::GetCurrentContext();
372 CHECK_NULL_VOID(pipeline);
373 auto theme = pipeline->GetTheme<V2::PatternLockTheme>();
374 CHECK_NULL_VOID(theme);
375 result = theme->GetActiveColor();
376 }
377 pattern->UpdateActiveColor(result, isFristLoad);
378 };
379 pattern->AddResObj(key, resObj, std::move(updateFunc));
380 }
381
HandleRegularColorResource(FrameNode * frameNode,const RefPtr<ResourceObject> & resObj)382 void PatternLockModelNG::HandleRegularColorResource(FrameNode* frameNode, const RefPtr<ResourceObject>& resObj)
383 {
384 auto pattern = frameNode->GetPattern<PatternLockPattern>();
385 CHECK_NULL_VOID(pattern);
386 std::string key = "patternLock.regularColor";
387 pattern->RemoveResObj(key);
388 CHECK_NULL_VOID(resObj);
389 auto&& updateFunc = [weak = AceType::WeakClaim(AceType::RawPtr(pattern)), key](
390 const RefPtr<ResourceObject>& resObj, bool isFristLoad = false) {
391 auto pattern = weak.Upgrade();
392 CHECK_NULL_VOID(pattern);
393 std::string color = pattern->GetResCacheMapByKey(key);
394 Color result;
395 if (!ResourceParseUtils::ParseResColor(resObj, result)) {
396 auto pipeline = PipelineBase::GetCurrentContext();
397 CHECK_NULL_VOID(pipeline);
398 auto theme = pipeline->GetTheme<V2::PatternLockTheme>();
399 CHECK_NULL_VOID(theme);
400 result = theme->GetRegularColor();
401 }
402 pattern->UpdateRegularColor(result, isFristLoad);
403 };
404 pattern->AddResObj(key, resObj, std::move(updateFunc));
405 }
406
HandleCircleRadiusResource(FrameNode * frameNode,const RefPtr<ResourceObject> & resObj)407 void PatternLockModelNG::HandleCircleRadiusResource(FrameNode* frameNode, const RefPtr<ResourceObject>& resObj)
408 {
409 auto pattern = frameNode->GetPattern<PatternLockPattern>();
410 CHECK_NULL_VOID(pattern);
411 std::string key = "patternLock.circleRadius";
412 pattern->RemoveResObj(key);
413 CHECK_NULL_VOID(resObj);
414 auto&& updateFunc = [weak = AceType::WeakClaim(AceType::RawPtr(pattern)), key](
415 const RefPtr<ResourceObject>& resObj, bool isFristLoad = false) {
416 auto pattern = weak.Upgrade();
417 CHECK_NULL_VOID(pattern);
418 CalcDimension result;
419 if (!ResourceParseUtils::ParseResDimensionVp(resObj, result) || result.IsNonPositive()) {
420 auto pipeline = PipelineBase::GetCurrentContext();
421 CHECK_NULL_VOID(pipeline);
422 auto theme = pipeline->GetTheme<V2::PatternLockTheme>();
423 CHECK_NULL_VOID(theme);
424 result = theme->GetCircleRadius();
425 }
426 pattern->UpdateCircleRadius(result, isFristLoad);
427 };
428 pattern->AddResObj(key, resObj, std::move(updateFunc));
429 }
430
HandleSideLengthResource(FrameNode * frameNode,const RefPtr<ResourceObject> & resObj)431 void PatternLockModelNG::HandleSideLengthResource(FrameNode* frameNode, const RefPtr<ResourceObject>& resObj)
432 {
433 auto pattern = frameNode->GetPattern<PatternLockPattern>();
434 CHECK_NULL_VOID(pattern);
435 std::string key = "patternLock.sideLength";
436 pattern->RemoveResObj(key);
437 CHECK_NULL_VOID(resObj);
438 auto&& updateFunc = [weak = AceType::WeakClaim(AceType::RawPtr(pattern)), key](
439 const RefPtr<ResourceObject>& resObj, bool isFristLoad = false) {
440 auto pattern = weak.Upgrade();
441 CHECK_NULL_VOID(pattern);
442 CalcDimension result;
443 if (!ResourceParseUtils::ParseResDimensionVp(resObj, result)) {
444 auto pipeline = PipelineBase::GetCurrentContext();
445 CHECK_NULL_VOID(pipeline);
446 auto theme = pipeline->GetTheme<V2::PatternLockTheme>();
447 CHECK_NULL_VOID(theme);
448 result = theme->GetSideLength();
449 }
450 pattern->UpdateSideLength(result, isFristLoad);
451 };
452 pattern->AddResObj(key, resObj, std::move(updateFunc));
453 }
454
HandleActiveCircleColorResource(FrameNode * frameNode,const RefPtr<ResourceObject> & resObj)455 void PatternLockModelNG::HandleActiveCircleColorResource(FrameNode* frameNode, const RefPtr<ResourceObject>& resObj)
456 {
457 auto pattern = frameNode->GetPattern<PatternLockPattern>();
458 CHECK_NULL_VOID(pattern);
459 std::string key = "patternLock.activeCircleColor";
460 pattern->RemoveResObj(key);
461 CHECK_NULL_VOID(resObj);
462 auto&& updateFunc = [weak = AceType::WeakClaim(AceType::RawPtr(pattern)), key](
463 const RefPtr<ResourceObject>& resObj, bool isFristLoad = false) {
464 auto pattern = weak.Upgrade();
465 CHECK_NULL_VOID(pattern);
466 std::string color = pattern->GetResCacheMapByKey(key);
467 Color result;
468 if (!ResourceParseUtils::ParseResColor(resObj, result)) {
469 result = Color::TRANSPARENT;
470 }
471 pattern->UpdateActiveCircleColor(result, isFristLoad);
472 };
473 pattern->AddResObj(key, resObj, std::move(updateFunc));
474 }
475 } // namespace OHOS::Ace::NG
476