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