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
16 #include <vector>
17 #include <map>
18 #include <cinttypes>
19
20 #include "preferences_ffi.h"
21 #include "preferences_impl.h"
22 #include "preferences_log.h"
23 #include "cj_lambda.h"
24
25 using namespace OHOS::FFI;
26 using namespace OHOS::Preferences;
27
28 namespace OHOS {
29 namespace Preferences {
30 extern "C" {
FfiOHOSPreferencesGetPreferences(OHOS::AbilityRuntime::Context * context,const char * name,const char * dataGroupId,int32_t * errCode)31 int64_t FfiOHOSPreferencesGetPreferences(OHOS::AbilityRuntime::Context* context, const char* name,
32 const char* dataGroupId, int32_t* errCode)
33 {
34 auto nativePreferences = FFIData::Create<PreferencesImpl>(context, name, dataGroupId, errCode);
35 if (!nativePreferences) {
36 return 0;
37 }
38 return nativePreferences->GetID();
39 }
40
FfiOHOSPreferencesDeletePreferences(OHOS::AbilityRuntime::Context * context,const char * name,const char * dataGroupId)41 int32_t FfiOHOSPreferencesDeletePreferences(OHOS::AbilityRuntime::Context* context, const char* name,
42 const char* dataGroupId)
43 {
44 return PreferencesImpl::DeletePreferences(context, name, dataGroupId);
45 }
46
FfiOHOSPreferencesRemovePreferencesFromCache(OHOS::AbilityRuntime::Context * context,const char * name,const char * dataGroupId)47 int32_t FfiOHOSPreferencesRemovePreferencesFromCache(OHOS::AbilityRuntime::Context* context, const char* name,
48 const char* dataGroupId)
49 {
50 return PreferencesImpl::RemovePreferencesFromCache(context, name, dataGroupId);
51 }
52
FfiOHOSPreferencesGet(int64_t id,const char * key,ValueType defValue)53 ValueType FfiOHOSPreferencesGet(int64_t id, const char* key, ValueType defValue)
54 {
55 auto instance = FFIData::GetData<PreferencesImpl>(id);
56 if (!instance) {
57 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
58 return ValueType{0};
59 }
60 return instance->Get(key, defValue);
61 }
62
FfiOHOSPreferencesPut(int64_t id,const char * key,ValueType value)63 int32_t FfiOHOSPreferencesPut(int64_t id, const char* key, ValueType value)
64 {
65 auto instance = FFIData::GetData<PreferencesImpl>(id);
66 if (!instance) {
67 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
68 return ERR_INVALID_INSTANCE_CODE;
69 }
70 return instance->Put(key, value);
71 }
72
FfiOHOSPreferencesGetAll(int64_t id)73 ValueTypes FfiOHOSPreferencesGetAll(int64_t id)
74 {
75 auto instance = FFIData::GetData<PreferencesImpl>(id);
76 if (!instance) {
77 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
78 return ValueTypes{0};
79 }
80 return instance->GetAll();
81 }
82
FfiOHOSPreferencesFlush(int64_t id)83 void FfiOHOSPreferencesFlush(int64_t id)
84 {
85 auto instance = FFIData::GetData<PreferencesImpl>(id);
86 if (!instance) {
87 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
88 return;
89 }
90 instance->Flush();
91 return;
92 }
93
FfiOHOSPreferencesClear(int64_t id)94 void FfiOHOSPreferencesClear(int64_t id)
95 {
96 auto instance = FFIData::GetData<PreferencesImpl>(id);
97 if (!instance) {
98 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
99 return;
100 }
101 instance->Clear();
102 return;
103 }
104
FfiOHOSPreferencesHas(int64_t id,const char * key)105 bool FfiOHOSPreferencesHas(int64_t id, const char* key)
106 {
107 auto instance = FFIData::GetData<PreferencesImpl>(id);
108 if (!instance) {
109 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
110 return false;
111 }
112 return instance->HasKey(key);
113 }
114
FfiOHOSPreferencesDelete(int64_t id,const char * key)115 int32_t FfiOHOSPreferencesDelete(int64_t id, const char* key)
116 {
117 auto instance = FFIData::GetData<PreferencesImpl>(id);
118 if (!instance) {
119 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
120 return ERR_INVALID_INSTANCE_CODE;
121 }
122 return instance->Delete(key);
123 }
124
FfiOHOSPreferencesOn(int64_t id,const char * mode,void (* callbackRef)(const char * valueRef))125 int32_t FfiOHOSPreferencesOn(int64_t id, const char* mode, void (*callbackRef)(const char* valueRef))
126 {
127 auto instance = FFIData::GetData<PreferencesImpl>(id);
128 if (!instance) {
129 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
130 return ERR_INVALID_INSTANCE_CODE;
131 }
132 auto onChange = [lambda = CJLambda::Create(callbackRef)](const std::string& valueRef) ->
133 void { lambda(valueRef.c_str()); };
134 return instance->RegisterObserver(mode, (std::function<void(std::string)>*)(callbackRef), onChange);
135 }
136
FfiOHOSPreferencesOff(int64_t id,const char * mode,void (* callbackRef)(const char * value))137 int32_t FfiOHOSPreferencesOff(int64_t id, const char* mode, void (*callbackRef)(const char* value))
138 {
139 auto instance = FFIData::GetData<PreferencesImpl>(id);
140 if (!instance) {
141 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
142 return ERR_INVALID_INSTANCE_CODE;
143 }
144 return instance->UnRegisterObserver(mode, (std::function<void(std::string)>*)(callbackRef));
145 }
146
FfiOHOSPreferencesOffAll(int64_t id,const char * mode)147 int32_t FfiOHOSPreferencesOffAll(int64_t id, const char* mode)
148 {
149 auto instance = FFIData::GetData<PreferencesImpl>(id);
150 if (!instance) {
151 LOGE("[Preferences] instance not exist. %{public}" PRId64, id);
152 return ERR_INVALID_INSTANCE_CODE;
153 }
154 return instance->UnRegisteredAllObservers(mode);
155 }
156 }
157 }
158 }