• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2025 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 "settings_monitor.h"
17 #include "enhancement_manager.h"
18 #include "medialibrary_type_const.h"
19 #include "media_log.h"
20 
21 namespace OHOS {
22 namespace Media {
CreateNonBlockDataShareHelper()23 std::shared_ptr<DataShare::DataShareHelper> SettingsMonitor::CreateNonBlockDataShareHelper()
24 {
25     sptr<ISystemAbilityManager> saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
26     if (saManager == nullptr) {
27         MEDIA_ERR_LOG("CreateNonBlockDataShareHelper: GetSystemAbilityManager failed.");
28         return nullptr;
29     }
30     sptr<IRemoteObject> remoteObj = saManager->GetSystemAbility(PHOTOS_STORAGE_MANAGER_ID);
31     if (remoteObj == nullptr) {
32         MEDIA_ERR_LOG("CreateNonBlockDataShareHelper: GetSystemAbility Service Failed.");
33         return nullptr;
34     }
35     auto [ret, helper] = DataShare::DataShareHelper::Create(remoteObj, SETTINGS_DATASHARE_URI, SETTINGS_DATA_EXT_URI);
36     if (ret == DataShare::E_OK) {
37         return helper;
38     } else if (ret == DataShare::E_DATA_SHARE_NOT_READY) {
39         MEDIA_ERR_LOG("CreateNonBlockDataShareHelper: datashare not ready.");
40         return nullptr;
41     } else {
42         MEDIA_ERR_LOG("CreateNonBlockDataShareHelper: create datashare fail, ret = %{public}d.", ret);
43         return nullptr;
44     }
45 }
46 
CreateDataShareHelper()47 std::shared_ptr<DataShare::DataShareHelper> SettingsMonitor::CreateDataShareHelper()
48 {
49     sptr<ISystemAbilityManager> saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
50     if (saManager == nullptr) {
51         MEDIA_ERR_LOG("CreateDataShareHelper, GetSystemAbilityManager failed.");
52         return nullptr;
53     }
54     sptr<IRemoteObject> remoteObj = saManager->GetSystemAbility(PHOTOS_STORAGE_MANAGER_ID);
55 
56     if (remoteObj == nullptr) {
57         MEDIA_ERR_LOG("CreateDataShareHelper, GetSystemAbility Service Failed.");
58         return nullptr;
59     }
60     return DataShare::DataShareHelper::Creator(remoteObj, SETTINGS_DATASHARE_URI, SETTINGS_DATA_EXT_URI);
61 }
62 
RegisterSettingsObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)63 void SettingsMonitor::RegisterSettingsObserver(const Uri &uri,
64     const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
65 {
66     auto settingHelper = CreateDataShareHelper();
67     if (settingHelper == nullptr) {
68         MEDIA_ERR_LOG("RegisterSettingsObserver, settingHelper is nullptr");
69         return;
70     }
71     settingHelper->RegisterObserver(uri, dataObserver);
72     settingHelper->Release();
73     return;
74 }
75 
UnregisterSettingsObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)76 void SettingsMonitor::UnregisterSettingsObserver(const Uri &uri,
77     const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
78 {
79     auto settingHelper = CreateDataShareHelper();
80     if (settingHelper == nullptr) {
81         MEDIA_ERR_LOG("UnregisterSettingsObserver, settingHelper is nullptr");
82         return;
83     }
84     settingHelper->UnregisterObserver(uri, dataObserver);
85     settingHelper->Release();
86     return;
87 }
88 
Insert(Uri uri,const std::string & key,const std::string & value)89 int32_t SettingsMonitor::Insert(Uri uri, const std::string &key, const std::string &value)
90 {
91     std::shared_ptr<DataShare::DataShareHelper> settingHelper = CreateDataShareHelper();
92     if (settingHelper == nullptr) {
93         MEDIA_ERR_LOG("settingHelper is null");
94         return 0;
95     }
96     DataShare::DataShareValuesBucket valuesBucket;
97     DataShare::DataShareValueObject keyObj(key);
98     DataShare::DataShareValueObject valueObj(value);
99     valuesBucket.Put(SETTING_KEY, keyObj);
100     valuesBucket.Put(SETTING_VALUE, valueObj);
101     int32_t result = settingHelper->Insert(uri, valuesBucket);
102     if (result == -1) {
103         settingHelper->Release();
104         return 0;
105     }
106     MEDIA_ERR_LOG("insert success");
107     settingHelper->NotifyChange(uri);
108     settingHelper->Release();
109     return 0;
110 }
111 
Query(Uri uri,const std::string & key,std::string & value)112 int32_t SettingsMonitor::Query(Uri uri, const std::string &key, std::string &value)
113 {
114     std::shared_ptr<DataShare::DataShareHelper> settingHelper = CreateNonBlockDataShareHelper();
115     if (settingHelper == nullptr) {
116         MEDIA_ERR_LOG("settingHelper is null");
117         return 0;
118     }
119 
120     std::vector<std::string> columns;
121     DataShare::DataSharePredicates predicates;
122     predicates.EqualTo(SETTING_KEY, key);
123     auto result = settingHelper->Query(uri, predicates, columns);
124     if (result == nullptr) {
125         MEDIA_ERR_LOG("SettingsMonitor: query error, result is null");
126         settingHelper->Release();
127         return 0;
128     }
129 
130     if (result->GoToFirstRow() != DataShare::E_OK) {
131         MEDIA_ERR_LOG("SettingsMonitor: query error, go to first row error");
132         result->Close();
133         settingHelper->Release();
134         return 0;
135     }
136 
137     int columnIndex = 0;
138     result->GetColumnIndex(SETTING_VALUE, columnIndex);
139     result->GetString(columnIndex, value);
140     result->Close();
141     settingHelper->Release();
142     MEDIA_ERR_LOG("SettingsMonitor: query success");
143     return 0;
144 }
145 
QueryPhotosAutoOption()146 std::string SettingsMonitor::QueryPhotosAutoOption()
147 {
148     Uri uri(SETTINGS_DATASHARE_AUTO_OPTION_URI);
149     std::string key = "persist.photos.ce.auto.option";
150     std::string value = "";
151     SettingsMonitor::Query(uri, key, value);
152     MEDIA_INFO_LOG("QueryPhotosAutoOption value: %{public}s", value.c_str());
153     return value;
154 }
155 
QueryPhotosWaterMark()156 bool SettingsMonitor::QueryPhotosWaterMark()
157 {
158     Uri uri(SETTINGS_DATASHARE_WATER_MARK_URI);
159     std::string key = "persist.photos.ce.watermark.enable";
160     std::string value = "";
161     SettingsMonitor::Query(uri, key, value);
162     MEDIA_INFO_LOG("QueryPhotosWaterMark value: %{public}s", value.c_str());
163     return value == WATER_MARK_ENABLED;
164 }
165 
OnChange()166 void PhotosAutoOptionObserver::OnChange()
167 {
168     MEDIA_INFO_LOG("PhotosAutoOptionObserver OnChange");
169     EnhancementManager::GetInstance().HandlePhotosAutoOptionChange(SettingsMonitor::QueryPhotosAutoOption());
170 }
171 
OnChange()172 void PhotosWaterMarkObserver::OnChange()
173 {
174     MEDIA_INFO_LOG("PhotosWaterMarkObserver OnChange");
175     EnhancementManager::GetInstance().HandlePhotosWaterMarkChange(SettingsMonitor::QueryPhotosWaterMark());
176 }
177 
178 } // namespace Media
179 } // namespace OHOS
180