1 /*
2  * Copyright (c) 2024 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/cj_frontend/interfaces/cj_ffi/cj_pattern_lock.h"
16 
17 #include <cinttypes>
18 
19 #include "cj_lambda.h"
20 #include "bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h"
21 #include "bridge/cj_frontend/interfaces/cj_ffi/utils.h"
22 #include "core/components_ng/pattern/patternlock/patternlock_model_ng.h"
23 #include "core/components_v2/pattern_lock/pattern_lock_component.h"
24 
25 using namespace OHOS::Ace;
26 using namespace OHOS::FFI;
27 using namespace OHOS::Ace::Framework;
28 
29 namespace OHOS::Ace::Framework {
NativePatternLockController()30 NativePatternLockController::NativePatternLockController() : FFIData()
31 {
32     LOGI("Native NativePatternLockController constructed: %{public}" PRId64, GetID());
33 }
34 
Reset()35 void NativePatternLockController::Reset()
36 {
37     if (controller_) {
38         controller_->Reset();
39     }
40 }
41 } // namespace OHOS::Ace::Framework
42 
43 extern "C" {
FfiOHOSAceFrameworkPatternLockCreate(int64_t controllerId)44 void FfiOHOSAceFrameworkPatternLockCreate(int64_t controllerId)
45 {
46     auto patternLock = PatternLockModel::GetInstance()->Create();
47     auto controller = FFIData::GetData<NativePatternLockController>(controllerId);
48     if (controller) {
49         controller->SetController(patternLock);
50     } else {
51         LOGE("patternLockControllerId is invalid");
52     }
53 }
FfiOHOSAceFrameworkPatternLockOnPatternComplete(void (* callback)(VectorInt32Handle array))54 void FfiOHOSAceFrameworkPatternLockOnPatternComplete(void (*callback)(VectorInt32Handle array))
55 {
56     auto onPatternComplete = [ffiCallback = CJLambda::Create(callback)](const BaseEventInfo* event) {
57         const auto* eventInfo = TypeInfoHelper::DynamicCast<V2::PatternCompleteEvent>(event);
58         if (!eventInfo) {
59             return;
60         }
61         auto vectorC = eventInfo->GetInput();
62         ffiCallback(&vectorC);
63     };
64     PatternLockModel::GetInstance()->SetPatternComplete(std::move(onPatternComplete));
65 }
FfiOHOSAceFrameworkPatternLockSelectedColor(uint32_t color)66 void FfiOHOSAceFrameworkPatternLockSelectedColor(uint32_t color)
67 {
68     PatternLockModel::GetInstance()->SetSelectedColor(Color(color));
69 }
FfiOHOSAceFrameworkPatternLockAutoReset(bool value)70 void FfiOHOSAceFrameworkPatternLockAutoReset(bool value)
71 {
72     PatternLockModel::GetInstance()->SetAutoReset(value);
73 }
FfiOHOSAceFrameworkPatternLockPathColor(uint32_t color)74 void FfiOHOSAceFrameworkPatternLockPathColor(uint32_t color)
75 {
76     PatternLockModel::GetInstance()->SetPathColor(Color(color));
77 }
FfiOHOSAceFrameworkPatternLockActiveColor(uint32_t color)78 void FfiOHOSAceFrameworkPatternLockActiveColor(uint32_t color)
79 {
80     PatternLockModel::GetInstance()->SetActiveColor(Color(color));
81 }
FfiOHOSAceFrameworkPatternLockRegularColor(uint32_t color)82 void FfiOHOSAceFrameworkPatternLockRegularColor(uint32_t color)
83 {
84     PatternLockModel::GetInstance()->SetRegularColor(Color(color));
85 }
FfiOHOSAceFrameworkPatternLockCircleRadius(double value,int32_t unit)86 void FfiOHOSAceFrameworkPatternLockCircleRadius(double value, int32_t unit)
87 {
88     PatternLockModel::GetInstance()->SetCircleRadius(Dimension(value, static_cast<DimensionUnit>(unit)));
89 }
FfiOHOSAceFrameworkPatternLockSideLength(double value,int32_t unit)90 void FfiOHOSAceFrameworkPatternLockSideLength(double value, int32_t unit)
91 {
92     PatternLockModel::GetInstance()->SetSideLength(Dimension(value, static_cast<DimensionUnit>(unit)));
93 }
FfiOHOSAceFrameworkPatternLockStrokeWidth(double value,int32_t unit)94 void FfiOHOSAceFrameworkPatternLockStrokeWidth(double value, int32_t unit)
95 {
96     PatternLockModel::GetInstance()->SetStrokeWidth(Dimension(value, static_cast<DimensionUnit>(unit)));
97 }
FfiOHOSAceFrameworkPatternLockControllerCreate()98 int64_t FfiOHOSAceFrameworkPatternLockControllerCreate()
99 {
100     auto controller = FFIData::Create<NativePatternLockController>();
101     return controller->GetID();
102 }
FfiOHOSAceFrameworkPatternLockControllerReset(int64_t selfID)103 void FfiOHOSAceFrameworkPatternLockControllerReset(int64_t selfID)
104 {
105     auto self = FFIData::GetData<NativePatternLockController>(selfID);
106     if (self) {
107         self->Reset();
108     } else {
109         LOGE("invalid pattern lock controller id");
110     }
111 }
112 }