• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 "setting_provider.h"
17 #include <thread>
18 #include "datashare_predicates.h"
19 #include "datashare_result_set.h"
20 #include "datashare_values_bucket.h"
21 #include "ipc_skeleton.h"
22 #include "iservice_registry.h"
23 #include "window_manager_hilog.h"
24 #include "rdb_errno.h"
25 #include "result_set.h"
26 #include "uri.h"
27 #include "screen_session_manager/include/screen_session_manager.h"
28 
29 namespace OHOS {
30 namespace Rosen {
31 sptr<SettingProvider> SettingProvider::instance_ = nullptr;
32 std::mutex SettingProvider::instanceMutex_;
33 sptr<IRemoteObject> SettingProvider::remoteObj_ = nullptr;
34 namespace {
35 const std::string SETTING_COLUMN_KEYWORD = "KEYWORD";
36 const std::string SETTING_COLUMN_VALUE = "VALUE";
37 const std::string SETTING_URI_PROXY = "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true";
38 const std::string WALL_KEY = "wallpaperAodDisplay";
39 const std::string DURING_CALL_KEY = "during_call_state";
40 const std::string SETTING_MULTI_USER_URI = "datashare:///com.ohos.settingsdata/entry/settingsdata/";
41 const std::string SETTING_MULTI_USER_TABLE = "USER_SETTINGSDATA_";
42 const std::string SETTING_SECURE_MULTI_USER_TABLE = "USER_SETTINGSDATA_SECURE_";
43 const std::string SETTING_MULTI_USER_PROXY = "?Proxy=true";
44 constexpr const char *SETTINGS_DATA_EXT_URI = "datashare:///com.ohos.settingsdata.DataAbility";
45 constexpr int32_t PARAM_NUM_TEN = 10;
46 } // namespace
47 
GetInstance(int32_t systemAbilityId)48 SettingProvider& SettingProvider::GetInstance(int32_t systemAbilityId)
49 {
50     if (instance_ == nullptr) {
51         std::lock_guard<std::mutex> lock(instanceMutex_);
52         if (instance_ == nullptr) {
53             instance_ = sptr<SettingProvider>::MakeSptr();
54             Initialize(systemAbilityId);
55         }
56     }
57     return *instance_;
58 }
59 
GetIntValue(const std::string & key,int32_t & value)60 ErrCode SettingProvider::GetIntValue(const std::string& key, int32_t& value)
61 {
62     int64_t valueLong;
63     ErrCode ret = GetLongValue(key, valueLong);
64     if (ret != ERR_OK) {
65         return ret;
66     }
67     value = static_cast<int32_t>(valueLong);
68     return ERR_OK;
69 }
70 
GetLongValue(const std::string & key,int64_t & value)71 ErrCode SettingProvider::GetLongValue(const std::string& key, int64_t& value)
72 {
73     std::string valueStr;
74     ErrCode ret = GetStringValue(key, valueStr);
75     if (ret != ERR_OK) {
76         return ret;
77     }
78     value = static_cast<int64_t>(strtoll(valueStr.c_str(), nullptr, PARAM_NUM_TEN));
79     return ERR_OK;
80 }
81 
GetBoolValue(const std::string & key,bool & value)82 ErrCode SettingProvider::GetBoolValue(const std::string& key, bool& value)
83 {
84     std::string valueStr;
85     ErrCode ret = GetStringValue(key, valueStr);
86     if (ret != ERR_OK) {
87         return ret;
88     }
89     value = (valueStr == "true");
90     return ERR_OK;
91 }
92 
PutIntValue(const std::string & key,int32_t value,bool needNotify)93 ErrCode SettingProvider::PutIntValue(const std::string& key, int32_t value, bool needNotify)
94 {
95     return PutStringValue(key, std::to_string(value), needNotify);
96 }
97 
PutLongValue(const std::string & key,int64_t value,bool needNotify)98 ErrCode SettingProvider::PutLongValue(const std::string& key, int64_t value, bool needNotify)
99 {
100     return PutStringValue(key, std::to_string(value), needNotify);
101 }
102 
PutBoolValue(const std::string & key,bool value,bool needNotify)103 ErrCode SettingProvider::PutBoolValue(const std::string& key, bool value, bool needNotify)
104 {
105     std::string valueStr = value ? "true" : "false";
106     return PutStringValue(key, valueStr, needNotify);
107 }
108 
IsValidKey(const std::string & key)109 bool SettingProvider::IsValidKey(const std::string& key)
110 {
111     std::string value;
112     ErrCode ret = GetStringValue(key, value);
113     return (ret != ERR_NAME_NOT_FOUND) && (!value.empty());
114 }
115 
CreateObserver(const std::string & key,SettingObserver::UpdateFunc & func)116 sptr<SettingObserver> SettingProvider::CreateObserver(const std::string& key, SettingObserver::UpdateFunc& func)
117 {
118     sptr<SettingObserver> observer = new SettingObserver();
119     observer->SetKey(key);
120     observer->SetUpdateFunc(func);
121     return observer;
122 }
123 
ExecRegisterCb(const sptr<SettingObserver> & observer)124 void SettingProvider::ExecRegisterCb(const sptr<SettingObserver>& observer)
125 {
126     if (observer == nullptr) {
127         TLOGE(WmsLogTag::DMS, "observer is nullptr");
128         return;
129     }
130     observer->OnChange();
131 }
132 
RegisterObserver(const sptr<SettingObserver> & observer)133 ErrCode SettingProvider::RegisterObserver(const sptr<SettingObserver>& observer)
134 {
135     if (observer == nullptr) {
136         return ERR_NO_INIT;
137     }
138     std::string callingIdentity = IPCSkeleton::ResetCallingIdentity();
139     Uri uri = (observer->GetKey() == DURING_CALL_KEY) ?
140         AssembleUriMultiUser(observer->GetKey()) : AssembleUri(observer->GetKey());
141     auto helper = CreateDataShareHelper();
142     if (helper == nullptr) {
143         IPCSkeleton::SetCallingIdentity(callingIdentity);
144         return ERR_NO_INIT;
145     }
146     helper->RegisterObserver(uri, observer);
147     helper->NotifyChange(uri);
148     std::thread execCb(SettingProvider::ExecRegisterCb, observer);
149     execCb.detach();
150     ReleaseDataShareHelper(helper);
151     IPCSkeleton::SetCallingIdentity(callingIdentity);
152     TLOGD(WmsLogTag::DMS, "succeed to register observer of uri=%{public}s", uri.ToString().c_str());
153     return ERR_OK;
154 }
155 
UnregisterObserver(const sptr<SettingObserver> & observer)156 ErrCode SettingProvider::UnregisterObserver(const sptr<SettingObserver>& observer)
157 {
158     if (observer == nullptr) {
159         return ERR_NO_INIT;
160     }
161     std::string callingIdentity = IPCSkeleton::ResetCallingIdentity();
162     auto uri = AssembleUri(observer->GetKey());
163     auto helper = CreateDataShareHelper();
164     if (helper == nullptr) {
165         IPCSkeleton::SetCallingIdentity(callingIdentity);
166         return ERR_NO_INIT;
167     }
168     helper->UnregisterObserver(uri, observer);
169     ReleaseDataShareHelper(helper);
170     IPCSkeleton::SetCallingIdentity(callingIdentity);
171     TLOGD(WmsLogTag::DMS, "succeed to unregister observer of uri=%{public}s", uri.ToString().c_str());
172     return ERR_OK;
173 }
174 
Initialize(int32_t systemAbilityId)175 void SettingProvider::Initialize(int32_t systemAbilityId)
176 {
177     auto sam = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
178     if (sam == nullptr) {
179         TLOGE(WmsLogTag::DMS, "GetSystemAbilityManager return nullptr");
180         return;
181     }
182     auto remoteObj = sam->GetSystemAbility(systemAbilityId);
183     if (remoteObj == nullptr) {
184         TLOGE(WmsLogTag::DMS, "GetSystemAbility return nullptr, systemAbilityId=%{public}d", systemAbilityId);
185         return;
186     }
187     remoteObj_ = remoteObj;
188 }
189 
GetStringValue(const std::string & key,std::string & value)190 ErrCode SettingProvider::GetStringValue(const std::string& key, std::string& value)
191 {
192     std::string callingIdentity = IPCSkeleton::ResetCallingIdentity();
193     auto helper = CreateDataShareHelper();
194     if (helper == nullptr) {
195         IPCSkeleton::SetCallingIdentity(callingIdentity);
196         return ERR_NO_INIT;
197     }
198     std::vector<std::string> columns = {SETTING_COLUMN_VALUE};
199     DataShare::DataSharePredicates predicates;
200     predicates.EqualTo(SETTING_COLUMN_KEYWORD, key);
201     Uri uri = (key == WALL_KEY || key == DURING_CALL_KEY) ? AssembleUriMultiUser(key) : AssembleUri(key);
202     auto resultSet = helper->Query(uri, predicates, columns);
203     ReleaseDataShareHelper(helper);
204     if (resultSet == nullptr) {
205         TLOGE(WmsLogTag::DMS, "helper->Query return nullptr");
206         IPCSkeleton::SetCallingIdentity(callingIdentity);
207         return ERR_INVALID_OPERATION;
208     }
209     int32_t count;
210     resultSet->GetRowCount(count);
211     if (count == 0) {
212         TLOGW(WmsLogTag::DMS, "not found value, key=%{public}s, count=%{public}d", key.c_str(), count);
213         IPCSkeleton::SetCallingIdentity(callingIdentity);
214         resultSet->Close();
215         return ERR_NAME_NOT_FOUND;
216     }
217     const int32_t INDEX = 0;
218     resultSet->GoToRow(INDEX);
219     int32_t ret = resultSet->GetString(INDEX, value);
220     if (ret != NativeRdb::E_OK) {
221         TLOGW(WmsLogTag::DMS, "resultSet->GetString return not ok, ret=%{public}d", ret);
222         IPCSkeleton::SetCallingIdentity(callingIdentity);
223         resultSet->Close();
224         return ERR_INVALID_VALUE;
225     }
226     resultSet->Close();
227     IPCSkeleton::SetCallingIdentity(callingIdentity);
228     return ERR_OK;
229 }
230 
GetStringValueMultiUser(const std::string & key,std::string & value)231 ErrCode SettingProvider::GetStringValueMultiUser(const std::string& key, std::string& value)
232 {
233     std::string callingIdentity = IPCSkeleton::ResetCallingIdentity();
234     auto helper = CreateDataShareHelperMultiUser();
235     if (helper == nullptr) {
236         IPCSkeleton::SetCallingIdentity(callingIdentity);
237         return ERR_NO_INIT;
238     }
239     std::vector<std::string> columns = {SETTING_COLUMN_VALUE};
240     DataShare::DataSharePredicates predicates;
241     predicates.EqualTo(SETTING_COLUMN_KEYWORD, key);
242     Uri uri(AssembleUriMultiUser(key));
243     auto resultSet = helper->Query(uri, predicates, columns);
244     ReleaseDataShareHelper(helper);
245     if (resultSet == nullptr) {
246         TLOGE(WmsLogTag::DMS, "helper->Query return nullptr");
247         IPCSkeleton::SetCallingIdentity(callingIdentity);
248         return ERR_INVALID_OPERATION;
249     }
250     int32_t count;
251     resultSet->GetRowCount(count);
252     if (count == 0) {
253         TLOGW(WmsLogTag::DMS, "not found value, key=%{public}s, count=%{public}d", key.c_str(), count);
254         IPCSkeleton::SetCallingIdentity(callingIdentity);
255         resultSet->Close();
256         return ERR_NAME_NOT_FOUND;
257     }
258     const int32_t INDEX = 0;
259     resultSet->GoToRow(INDEX);
260     int32_t ret = resultSet->GetString(INDEX, value);
261     if (ret != NativeRdb::E_OK) {
262         TLOGW(WmsLogTag::DMS, "resultSet->GetString return not ok, ret=%{public}d", ret);
263         IPCSkeleton::SetCallingIdentity(callingIdentity);
264         resultSet->Close();
265         return ERR_INVALID_VALUE;
266     }
267     resultSet->Close();
268     IPCSkeleton::SetCallingIdentity(callingIdentity);
269     return ERR_OK;
270 }
271 
PutStringValue(const std::string & key,const std::string & value,bool needNotify)272 ErrCode SettingProvider::PutStringValue(const std::string& key, const std::string& value, bool needNotify)
273 {
274     std::string callingIdentity = IPCSkeleton::ResetCallingIdentity();
275     auto helper = CreateDataShareHelper();
276     if (helper == nullptr) {
277         IPCSkeleton::SetCallingIdentity(callingIdentity);
278         return ERR_NO_INIT;
279     }
280     DataShare::DataShareValueObject keyObj(key);
281     DataShare::DataShareValueObject valueObj(value);
282     DataShare::DataShareValuesBucket bucket;
283     bucket.Put(SETTING_COLUMN_KEYWORD, keyObj);
284     bucket.Put(SETTING_COLUMN_VALUE, valueObj);
285     DataShare::DataSharePredicates predicates;
286     predicates.EqualTo(SETTING_COLUMN_KEYWORD, key);
287     Uri uri = (key == DURING_CALL_KEY) ? AssembleUriMultiUser(key) : AssembleUri(key);
288     if (helper->Update(uri, predicates, bucket) <= 0) {
289         TLOGD(WmsLogTag::DMS, "no data exist, insert one row");
290         helper->Insert(uri, bucket);
291     }
292     if (needNotify) {
293         helper->NotifyChange(AssembleUri(key));
294     }
295     ReleaseDataShareHelper(helper);
296     IPCSkeleton::SetCallingIdentity(callingIdentity);
297     return ERR_OK;
298 }
299 
CreateDataShareHelper()300 std::shared_ptr<DataShare::DataShareHelper> SettingProvider::CreateDataShareHelper()
301 {
302     auto helper = DataShare::DataShareHelper::Creator(remoteObj_, SETTING_URI_PROXY, SETTINGS_DATA_EXT_URI);
303     if (helper == nullptr) {
304         TLOGW(WmsLogTag::DMS, "helper is nullptr, uri=%{public}s", SETTING_URI_PROXY.c_str());
305         return nullptr;
306     }
307     return helper;
308 }
309 
CreateDataShareHelperMultiUser()310 std::shared_ptr<DataShare::DataShareHelper> SettingProvider::CreateDataShareHelperMultiUser()
311 {
312     std::string uriString = "";
313     int32_t userId = ScreenSessionManager::GetInstance().GetCurrentUserId();
314     if (userId > 0) {
315         TLOGI(WmsLogTag::DMS, "current userId: %{public}d", userId);
316         std::string userIdString = std::to_string(userId);
317         uriString = SETTING_MULTI_USER_URI + SETTING_MULTI_USER_TABLE + userIdString +
318             SETTING_MULTI_USER_PROXY;
319     } else {
320         TLOGE(WmsLogTag::DMS, "invalid userId: %{public}d, use default uri", userId);
321         uriString = SETTING_URI_PROXY;
322     }
323     auto helper = DataShare::DataShareHelper::Creator(remoteObj_, uriString, SETTINGS_DATA_EXT_URI);
324     if (helper == nullptr) {
325         TLOGW(WmsLogTag::DMS, "helper is nullptr, uri=%{public}s", uriString.c_str());
326         return nullptr;
327     }
328     return helper;
329 }
330 
ReleaseDataShareHelper(std::shared_ptr<DataShare::DataShareHelper> & helper)331 bool SettingProvider::ReleaseDataShareHelper(std::shared_ptr<DataShare::DataShareHelper>& helper)
332 {
333     if (!helper->Release()) {
334         TLOGW(WmsLogTag::DMS, "release helper fail");
335         return false;
336     }
337     return true;
338 }
339 
AssembleUri(const std::string & key)340 Uri SettingProvider::AssembleUri(const std::string& key)
341 {
342     Uri uri(SETTING_URI_PROXY + "&key=" + key);
343     return uri;
344 }
345 
AssembleUriMultiUser(const std::string & key)346 Uri SettingProvider::AssembleUriMultiUser(const std::string& key)
347 {
348     std::string uriString = "";
349     int32_t userId = ScreenSessionManager::GetInstance().GetCurrentUserId();
350     if (userId > 0) {
351         TLOGI(WmsLogTag::DMS, "current userId: %{public}d", userId);
352         std::string userIdString = std::to_string(userId);
353         uriString = SETTING_MULTI_USER_URI + SETTING_MULTI_USER_TABLE + userIdString +
354             SETTING_MULTI_USER_PROXY + "&key=" + key;
355         if (key == WALL_KEY || key == DURING_CALL_KEY) {
356             uriString = SETTING_MULTI_USER_URI + SETTING_SECURE_MULTI_USER_TABLE +
357                 userIdString + SETTING_MULTI_USER_PROXY + "&key=" + key;
358         }
359     } else {
360         TLOGE(WmsLogTag::DMS, "invalid userId: %{public}d, use default uri", userId);
361         uriString = SETTING_URI_PROXY + "&key=" + key;
362     }
363     Uri uri(uriString);
364     return uri;
365 }
366 
RegisterObserverByTable(const sptr<SettingObserver> & observer,std::string tableName)367 ErrCode SettingProvider::RegisterObserverByTable(const sptr<SettingObserver>& observer, std::string tableName)
368 {
369     if (observer == nullptr) {
370         return ERR_NO_INIT;
371     }
372     std::string callingIdentity = IPCSkeleton::ResetCallingIdentity();
373     auto uri = AssembleUriMultiUserByTable(observer->GetKey(), tableName);
374     auto helper = CreateDataShareHelperMultiUserByTable(tableName);
375     if (helper == nullptr) {
376         IPCSkeleton::SetCallingIdentity(callingIdentity);
377         return ERR_NO_INIT;
378     }
379     helper->RegisterObserver(uri, observer);
380     helper->NotifyChange(uri);
381     std::thread execCb(SettingProvider::ExecRegisterCb, observer);
382     execCb.detach();
383     ReleaseDataShareHelper(helper);
384     IPCSkeleton::SetCallingIdentity(callingIdentity);
385     TLOGD(WmsLogTag::DMS, "succeed to register observer of uri=%{public}s", uri.ToString().c_str());
386     return ERR_OK;
387 }
388 
UnregisterObserverByTable(const sptr<SettingObserver> & observer,std::string tableName)389 ErrCode SettingProvider::UnregisterObserverByTable(const sptr<SettingObserver>& observer, std::string tableName)
390 {
391     if (observer == nullptr) {
392         return ERR_NO_INIT;
393     }
394     std::string callingIdentity = IPCSkeleton::ResetCallingIdentity();
395     auto uri = AssembleUriMultiUserByTable(observer->GetKey(), tableName);
396     auto helper = CreateDataShareHelperMultiUserByTable(tableName);
397     if (helper == nullptr) {
398         IPCSkeleton::SetCallingIdentity(callingIdentity);
399         return ERR_NO_INIT;
400     }
401     helper->UnregisterObserver(uri, observer);
402     ReleaseDataShareHelper(helper);
403     IPCSkeleton::SetCallingIdentity(callingIdentity);
404     TLOGD(WmsLogTag::DMS, "succeed to unregister observer of uri=%{public}s", uri.ToString().c_str());
405     return ERR_OK;
406 }
407 
GetIntValueMultiUserByTable(const std::string & key,int32_t & value,std::string tableName)408 ErrCode SettingProvider::GetIntValueMultiUserByTable(const std::string& key, int32_t& value, std::string tableName)
409 {
410     int64_t result = 0;
411     ErrCode ret = GetLongValueMultiUserByTable(key, result, tableName);
412     if (ret != ERR_OK) {
413         return ret;
414     }
415     value = static_cast<int32_t>(result);
416     return ERR_OK;
417 }
418 
GetLongValueMultiUserByTable(const std::string & key,int64_t & value,std::string tableName)419 ErrCode SettingProvider::GetLongValueMultiUserByTable(const std::string& key, int64_t& value, std::string tableName)
420 {
421     std::string result = "";
422     ErrCode ret = GetStringValueMultiUserByTable(key, result, tableName);
423     if (ret != ERR_OK) {
424         return ret;
425     }
426     value = static_cast<int64_t>(strtoll(result.c_str(), nullptr, PARAM_NUM_TEN));
427     return ERR_OK;
428 }
429 
GetStringValueMultiUserByTable(const std::string & key,std::string & value,std::string tableName)430 ErrCode SettingProvider::GetStringValueMultiUserByTable(const std::string& key,
431     std::string& value, std::string tableName)
432 {
433     std::string callingIdentity = IPCSkeleton::ResetCallingIdentity();
434     auto helper = CreateDataShareHelperMultiUserByTable(tableName);
435     if (helper == nullptr) {
436         IPCSkeleton::SetCallingIdentity(callingIdentity);
437         return ERR_NO_INIT;
438     }
439     std::vector<std::string> columns = {SETTING_COLUMN_VALUE};
440     DataShare::DataSharePredicates predicates;
441     predicates.EqualTo(SETTING_COLUMN_KEYWORD, key);
442     Uri uri(AssembleUriMultiUserByTable(key, tableName));
443     auto resultSet = helper->Query(uri, predicates, columns);
444     ReleaseDataShareHelper(helper);
445     if (resultSet == nullptr) {
446         TLOGE(WmsLogTag::DMS, "helper->Query return nullptr");
447         IPCSkeleton::SetCallingIdentity(callingIdentity);
448         return ERR_INVALID_OPERATION;
449     }
450     int32_t count;
451     resultSet->GetRowCount(count);
452     if (count == 0) {
453         TLOGW(WmsLogTag::DMS, "not found value, key=%{public}s, count=%{public}d", key.c_str(), count);
454         IPCSkeleton::SetCallingIdentity(callingIdentity);
455         resultSet->Close();
456         return ERR_NAME_NOT_FOUND;
457     }
458     const int32_t INDEX = 0;
459     resultSet->GoToRow(INDEX);
460     int32_t ret = resultSet->GetString(INDEX, value);
461     if (ret != NativeRdb::E_OK) {
462         TLOGW(WmsLogTag::DMS, "resultSet->GetString return not ok, ret=%{public}d", ret);
463         IPCSkeleton::SetCallingIdentity(callingIdentity);
464         resultSet->Close();
465         return ERR_INVALID_VALUE;
466     }
467     resultSet->Close();
468     IPCSkeleton::SetCallingIdentity(callingIdentity);
469     return ERR_OK;
470 }
471 
CreateDataShareHelperMultiUserByTable(std::string tableName)472 std::shared_ptr<DataShare::DataShareHelper> SettingProvider::CreateDataShareHelperMultiUserByTable(
473     std::string tableName)
474 {
475     std::string address = "";
476     int32_t userId = ScreenSessionManager::GetInstance().GetCurrentUserId();
477     if (userId > 0) {
478         TLOGD(WmsLogTag::DMS, "current userId: %{public}d", userId);
479         std::string userIdString = std::to_string(userId);
480         address = SETTING_MULTI_USER_URI + tableName + userIdString +
481             SETTING_MULTI_USER_PROXY;
482     } else {
483         TLOGE(WmsLogTag::DMS, "invalid userId: %{public}d, use default uri", userId);
484         address = SETTING_URI_PROXY;
485     }
486     auto helper = DataShare::DataShareHelper::Creator(remoteObj_, address, SETTINGS_DATA_EXT_URI);
487     if (helper == nullptr) {
488         TLOGW(WmsLogTag::DMS, "helper is nullptr, uri=%{public}s", address.c_str());
489         return nullptr;
490     }
491     return helper;
492 }
493 
AssembleUriMultiUserByTable(const std::string & key,std::string tableName)494 Uri SettingProvider::AssembleUriMultiUserByTable(const std::string& key, std::string tableName)
495 {
496     std::string address = "";
497     int32_t userId = ScreenSessionManager::GetInstance().GetCurrentUserId();
498     if (userId > 0) {
499         TLOGD(WmsLogTag::DMS, "current userId: %{public}d", userId);
500         std::string userIdString = std::to_string(userId);
501         address = SETTING_MULTI_USER_URI + tableName + userIdString +
502             SETTING_MULTI_USER_PROXY + "&key=" + key;
503     } else {
504         TLOGE(WmsLogTag::DMS, "invalid userId: %{public}d, use default uri", userId);
505         address = SETTING_URI_PROXY + "&key=" + key;
506     }
507     Uri uri(address);
508     return uri;
509 }
510 } // namespace Rosen
511 } // namespace OHOS