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 }