1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License. 5e0dac50fSopenharmony_ci * You may obtain a copy of the License at 6e0dac50fSopenharmony_ci * 7e0dac50fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0dac50fSopenharmony_ci * 9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and 13e0dac50fSopenharmony_ci * limitations under the License. 14e0dac50fSopenharmony_ci */ 15e0dac50fSopenharmony_ci 16e0dac50fSopenharmony_ci#include "persistent_storage.h" 17e0dac50fSopenharmony_ci 18e0dac50fSopenharmony_cinamespace OHOS { 19e0dac50fSopenharmony_cinamespace Rosen { 20e0dac50fSopenharmony_cinamespace { 21e0dac50fSopenharmony_ciconstexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "PersistentStorage"}; 22e0dac50fSopenharmony_ci} 23e0dac50fSopenharmony_ci 24e0dac50fSopenharmony_citemplate void PersistentStorage::Insert(const std::string&, const int&, PersistentStorageType); 25e0dac50fSopenharmony_citemplate void PersistentStorage::Insert(const std::string&, const float&, PersistentStorageType); 26e0dac50fSopenharmony_citemplate void PersistentStorage::Get(const std::string&, int&, PersistentStorageType); 27e0dac50fSopenharmony_citemplate void PersistentStorage::Get(const std::string&, float&, PersistentStorageType); 28e0dac50fSopenharmony_ci 29e0dac50fSopenharmony_cistd::map<PersistentStorageType, std::string> PersistentStorage::storagePath_ = { 30e0dac50fSopenharmony_ci { PersistentStorageType::ASPECT_RATIO, "/data/service/el1/public/window/window_aspect_ratio.xml" }, 31e0dac50fSopenharmony_ci { PersistentStorageType::MAXIMIZE_STATE, "/data/service/el1/public/window/window_maximize_state.xml" }, 32e0dac50fSopenharmony_ci}; 33e0dac50fSopenharmony_ci 34e0dac50fSopenharmony_cibool PersistentStorage::HasKey(const std::string& key, PersistentStorageType storageType) 35e0dac50fSopenharmony_ci{ 36e0dac50fSopenharmony_ci bool res = false; 37e0dac50fSopenharmony_ci auto pref = GetPreference(storageType); 38e0dac50fSopenharmony_ci if (!pref) { 39e0dac50fSopenharmony_ci WLOGE("[PersistentStorage] Preferences is nullptr"); 40e0dac50fSopenharmony_ci return res; 41e0dac50fSopenharmony_ci } 42e0dac50fSopenharmony_ci res = pref->HasKey(key); 43e0dac50fSopenharmony_ci WLOGD("[PersistentStorage] %{public}s %{public}s", key.c_str(), 44e0dac50fSopenharmony_ci (res ? "Has persisted key:" : "Don't have persisted key:")); 45e0dac50fSopenharmony_ci return res; 46e0dac50fSopenharmony_ci} 47e0dac50fSopenharmony_ci 48e0dac50fSopenharmony_civoid PersistentStorage::Delete(const std::string& key, PersistentStorageType storageType) 49e0dac50fSopenharmony_ci{ 50e0dac50fSopenharmony_ci auto pref = GetPreference(storageType); 51e0dac50fSopenharmony_ci if (!pref) { 52e0dac50fSopenharmony_ci WLOGE("[PersistentStorage] Preferences is nullptr"); 53e0dac50fSopenharmony_ci return; 54e0dac50fSopenharmony_ci } 55e0dac50fSopenharmony_ci pref->Delete(key); 56e0dac50fSopenharmony_ci pref->Flush(); 57e0dac50fSopenharmony_ci WLOGD("[PersistentStorage] Delete key %{public}s", key.c_str()); 58e0dac50fSopenharmony_ci} 59e0dac50fSopenharmony_ci 60e0dac50fSopenharmony_cistd::shared_ptr<PersistentPerference> PersistentStorage::GetPreference(PersistentStorageType storageType) 61e0dac50fSopenharmony_ci{ 62e0dac50fSopenharmony_ci auto iter = storagePath_.find(storageType); 63e0dac50fSopenharmony_ci if (iter == storagePath_.end()) { 64e0dac50fSopenharmony_ci return nullptr; 65e0dac50fSopenharmony_ci } 66e0dac50fSopenharmony_ci auto fileName = storagePath_[storageType]; 67e0dac50fSopenharmony_ci int errCode; 68e0dac50fSopenharmony_ci auto pref = NativePreferences::PreferencesHelper::GetPreferences(fileName, errCode); 69e0dac50fSopenharmony_ci WLOGD("[PersistentStorage] GetPreference fileName: %{public}s, errCode: %{public}d", fileName.c_str(), errCode); 70e0dac50fSopenharmony_ci return pref; 71e0dac50fSopenharmony_ci} 72e0dac50fSopenharmony_ci 73e0dac50fSopenharmony_citemplate <typename T> 74e0dac50fSopenharmony_civoid PersistentStorage::Insert(const std::string& key, const T& value, PersistentStorageType storageType) 75e0dac50fSopenharmony_ci{ 76e0dac50fSopenharmony_ci auto pref = GetPreference(storageType); 77e0dac50fSopenharmony_ci if (!pref) { 78e0dac50fSopenharmony_ci WLOGFE("[PersistentStorage] Preferences is nullptr"); 79e0dac50fSopenharmony_ci return; 80e0dac50fSopenharmony_ci } 81e0dac50fSopenharmony_ci switch (storageType) { 82e0dac50fSopenharmony_ci case PersistentStorageType::ASPECT_RATIO: { 83e0dac50fSopenharmony_ci pref->PutFloat(key, value); 84e0dac50fSopenharmony_ci WLOGFD("[PersistentStorage] Insert aspect ratio, key %{public}s, value %{public}f", 85e0dac50fSopenharmony_ci key.c_str(), static_cast<float>(value)); 86e0dac50fSopenharmony_ci break; 87e0dac50fSopenharmony_ci } 88e0dac50fSopenharmony_ci case PersistentStorageType::MAXIMIZE_STATE: { 89e0dac50fSopenharmony_ci pref->PutInt(key, value); 90e0dac50fSopenharmony_ci WLOGFD("[PersistentStorage] Insert Maximize state, key %{public}s, value %{public}d", 91e0dac50fSopenharmony_ci key.c_str(), static_cast<int>(value)); 92e0dac50fSopenharmony_ci break; 93e0dac50fSopenharmony_ci } 94e0dac50fSopenharmony_ci default: 95e0dac50fSopenharmony_ci WLOGFW("[PersistentStorage] Unknown storage type!"); 96e0dac50fSopenharmony_ci } 97e0dac50fSopenharmony_ci pref->Flush(); 98e0dac50fSopenharmony_ci} 99e0dac50fSopenharmony_ci 100e0dac50fSopenharmony_citemplate <typename T> 101e0dac50fSopenharmony_civoid PersistentStorage::Get(const std::string& key, T& value, PersistentStorageType storageType) 102e0dac50fSopenharmony_ci{ 103e0dac50fSopenharmony_ci auto pref = GetPreference(storageType); 104e0dac50fSopenharmony_ci if (!pref) { 105e0dac50fSopenharmony_ci WLOGFE("[PersistentStorage] Preferences is nullptr"); 106e0dac50fSopenharmony_ci return; 107e0dac50fSopenharmony_ci } 108e0dac50fSopenharmony_ci switch (storageType) { 109e0dac50fSopenharmony_ci case PersistentStorageType::ASPECT_RATIO: { 110e0dac50fSopenharmony_ci value = pref->GetFloat(key); 111e0dac50fSopenharmony_ci WLOGFD("[PersistentStorage] Get aspect ratio, key: %{public}s, value:%{public}f", 112e0dac50fSopenharmony_ci key.c_str(), static_cast<float>(value)); 113e0dac50fSopenharmony_ci break; 114e0dac50fSopenharmony_ci } 115e0dac50fSopenharmony_ci case PersistentStorageType::MAXIMIZE_STATE: { 116e0dac50fSopenharmony_ci value = pref->GetInt(key); 117e0dac50fSopenharmony_ci WLOGFD("[PersistentStorage] Get Maximize state, key: %{public}s, value:%{public}d", 118e0dac50fSopenharmony_ci key.c_str(), static_cast<int>(value)); 119e0dac50fSopenharmony_ci break; 120e0dac50fSopenharmony_ci } 121e0dac50fSopenharmony_ci default: 122e0dac50fSopenharmony_ci WLOGFW("[PersistentStorage] Unknown storage type!"); 123e0dac50fSopenharmony_ci } 124e0dac50fSopenharmony_ci} 125e0dac50fSopenharmony_ci} // namespace Rosen 126e0dac50fSopenharmony_ci} // namespace OHOS