1 /*
2  * Copyright (c) 2022 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 "bridge/declarative_frontend/jsview/models/patternlock_model_impl.h"
17 
18 #include <utility>
19 
20 #include "bridge/declarative_frontend/jsview/js_interactable_view.h"
21 #include "bridge/declarative_frontend/jsview/js_view_abstract.h"
22 #include "bridge/declarative_frontend/jsview/js_view_common_def.h"
23 #include "bridge/declarative_frontend/view_stack_processor.h"
24 #include "core/components_v2/pattern_lock/pattern_lock_component.h"
25 #include "core/components_v2/pattern_lock/pattern_lock_theme.h"
26 
27 namespace OHOS::Ace::Framework {
28 
Create()29 RefPtr<V2::PatternLockController> PatternLockModelImpl::Create()
30 {
31     auto lock = AceType::MakeRefPtr<V2::PatternLockComponent>();
32     auto lockTheme = JSViewAbstract::GetTheme<V2::PatternLockTheme>();
33     if (!lockTheme) {
34         LOGE("Get PatternLock theme error");
35     } else {
36         lock->SetRegularColor(lockTheme->GetRegularColor());
37         lock->SetSelectedColor(lockTheme->GetSelectedColor());
38         lock->SetActiveColor(lockTheme->GetActiveColor());
39         lock->SetPathColor(lockTheme->GetPathColor());
40     }
41 
42     ViewStackProcessor::GetInstance()->Push(lock);
43     auto box = ViewStackProcessor::GetInstance()->GetBoxComponent();
44     auto flexItem = ViewStackProcessor::GetInstance()->GetFlexItemComponent();
45     Dimension defaultSideLength { V2::DEFAULT_SIDE_LENGTH, DimensionUnit::VP };
46     box->SetMinWidth(defaultSideLength);
47     box->SetMinHeight(defaultSideLength);
48     box->SetMaxHeight(defaultSideLength);
49     box->SetMaxWidth(defaultSideLength);
50     flexItem->SetMinWidth(defaultSideLength);
51     flexItem->SetMinHeight(defaultSideLength);
52     flexItem->SetMaxWidth(defaultSideLength);
53     flexItem->SetMaxHeight(defaultSideLength);
54 
55     return lock->GetPatternLockController();
56 }
57 
SetPatternComplete(std::function<void (const BaseEventInfo * info)> && onComplete)58 void PatternLockModelImpl::SetPatternComplete(std::function<void(const BaseEventInfo* info)>&& onComplete)
59 {
60     auto lock = AceType::DynamicCast<V2::PatternLockComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
61     CHECK_NULL_VOID(lock);
62     lock->SetPatternCompleteEvent(EventMarker(std::move(onComplete)));
63 }
64 
SetSelectedColor(const Color & selectedColor)65 void PatternLockModelImpl::SetSelectedColor(const Color& selectedColor)
66 {
67     auto lock = AceType::DynamicCast<V2::PatternLockComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
68     CHECK_NULL_VOID(lock);
69     lock->SetSelectedColor(selectedColor);
70 }
71 
SetAutoReset(bool isAutoReset)72 void PatternLockModelImpl::SetAutoReset(bool isAutoReset)
73 {
74     auto lock = AceType::DynamicCast<V2::PatternLockComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
75     CHECK_NULL_VOID(lock);
76     lock->SetAutoReset(isAutoReset);
77 }
78 
SetPathColor(const Color & pathColor)79 void PatternLockModelImpl::SetPathColor(const Color& pathColor)
80 {
81     auto lock = AceType::DynamicCast<V2::PatternLockComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
82     CHECK_NULL_VOID(lock);
83     lock->SetPathColor(pathColor);
84 }
85 
SetActiveColor(const Color & activeColor)86 void PatternLockModelImpl::SetActiveColor(const Color& activeColor)
87 {
88     auto lock = AceType::DynamicCast<V2::PatternLockComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
89     CHECK_NULL_VOID(lock);
90     lock->SetActiveColor(activeColor);
91 }
92 
SetRegularColor(const Color & regularColor)93 void PatternLockModelImpl::SetRegularColor(const Color& regularColor)
94 {
95     auto lock = AceType::DynamicCast<V2::PatternLockComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
96     CHECK_NULL_VOID(lock);
97     lock->SetRegularColor(regularColor);
98 }
99 
SetCircleRadius(const Dimension & radius)100 void PatternLockModelImpl::SetCircleRadius(const Dimension& radius)
101 {
102     auto lock = AceType::DynamicCast<V2::PatternLockComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
103     CHECK_NULL_VOID(lock);
104     lock->SetCircleRadius(radius);
105 }
106 
SetSideLength(const Dimension & sideLength)107 void PatternLockModelImpl::SetSideLength(const Dimension& sideLength)
108 {
109     auto lock = AceType::DynamicCast<V2::PatternLockComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
110     CHECK_NULL_VOID(lock);
111     lock->SetSideLength(sideLength);
112     auto box = ViewStackProcessor::GetInstance()->GetBoxComponent();
113     box->SetMinWidth(sideLength);
114     box->SetMinHeight(sideLength);
115     box->SetMaxWidth(sideLength);
116     box->SetMaxHeight(sideLength);
117     auto flexItem = ViewStackProcessor::GetInstance()->GetFlexItemComponent();
118     flexItem->SetMinWidth(sideLength);
119     flexItem->SetMinHeight(sideLength);
120     flexItem->SetMaxWidth(sideLength);
121     flexItem->SetMaxHeight(sideLength);
122 }
123 
SetStrokeWidth(const Dimension & lineWidth)124 void PatternLockModelImpl::SetStrokeWidth(const Dimension& lineWidth)
125 {
126     auto component =
127         AceType::DynamicCast<V2::PatternLockComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
128     CHECK_NULL_VOID(component);
129     if (GreatOrEqual(lineWidth.Value(), 0.0)) {
130         component->SetStrokeWidth(lineWidth);
131     } else {
132         component->SetStrokeWidth(0.0_vp);
133     }
134 }
135 
SetActiveCircleColor(const Color & activeCircleColor)136 void PatternLockModelImpl::SetActiveCircleColor(const Color& activeCircleColor) {};
SetActiveCircleRadius(const Dimension & activeCircleRadius)137 void PatternLockModelImpl::SetActiveCircleRadius(const Dimension& activeCircleRadius) {};
SetEnableWaveEffect(bool enableWaveEffect)138 void PatternLockModelImpl::SetEnableWaveEffect(bool enableWaveEffect) {};
139 } // namespace OHOS::Ace::Framework
140