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 }