From b2bd149c5fb91b42506193b5f161d50555f02be2 Mon Sep 17 00:00:00 2001 From: caochuan Date: Sat, 7 Oct 2023 14:40:39 +0800 Subject: [PATCH] feat: SA load extension Signed-off-by: caochuan --- .../include/file_access_ext_ability.h | 2 +- .../include/file_access_ext_proxy.h | 2 +- .../include/file_access_ext_stub_impl.h | 2 +- .../file_access/include/file_access_helper.h | 2 - .../include/ifile_access_ext_base.h | 2 +- .../include/js_file_access_ext_ability.h | 2 +- .../libfile_access_extension_ability_kit.map | 1 + .../src/file_access_ext_ability.cpp | 2 +- .../file_access/src/file_access_ext_proxy.cpp | 7 +- .../file_access/src/file_access_ext_stub.cpp | 8 +- .../src/file_access_ext_stub_impl.cpp | 4 +- .../file_access/src/file_access_helper.cpp | 53 ----------- .../src/js_file_access_ext_ability.cpp | 9 +- services/BUILD.gn | 5 + .../FileExtensionAbility.ts | 18 +--- .../include/file_access_service.h | 3 + .../src/file_access_service.cpp | 95 +++++++++++++++++++ .../src/file_access_service_proxy.cpp | 20 +++- 18 files changed, 137 insertions(+), 100 deletions(-) diff --git a/interfaces/inner_api/file_access/include/file_access_ext_ability.h b/interfaces/inner_api/file_access/include/file_access_ext_ability.h index 2479bc65..644d1662 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_ability.h @@ -62,7 +62,7 @@ public: virtual int Access(const Uri &uri, bool &isExist); static void SetCreator(const CreatorFunc& creator); virtual int StartWatcher(const Uri &uri); - virtual int StopWatcher(const Uri &uri, bool isUnregisterAll); + virtual int StopWatcher(const Uri &uri); private: static CreatorFunc creator_; }; diff --git a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h index 7b981fd3..c681ae6b 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h @@ -58,7 +58,7 @@ public: virtual int GetRoots(std::vector &rootInfoVec) override; virtual int Access(const Uri &uri, bool &isExist) override; virtual int StartWatcher(const Uri &uri) override; - virtual int StopWatcher(const Uri &uri, bool isUnregisterAll) override; + virtual int StopWatcher(const Uri &uri) override; private: static inline BrokerDelegator delegator_; }; diff --git a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h index 07db5e0b..9acb2c65 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h @@ -55,7 +55,7 @@ public: int GetRoots(std::vector &rootInfoVec) override; int Access(const Uri &uri, bool &isExist) override; int StartWatcher(const Uri &uri) override; - int StopWatcher(const Uri &uri, bool isUnregisterAll) override; + int StopWatcher(const Uri &uri) override; private: std::shared_ptr GetOwner(); diff --git a/interfaces/inner_api/file_access/include/file_access_helper.h b/interfaces/inner_api/file_access/include/file_access_helper.h index 692fd4d8..460cfe08 100644 --- a/interfaces/inner_api/file_access/include/file_access_helper.h +++ b/interfaces/inner_api/file_access/include/file_access_helper.h @@ -90,8 +90,6 @@ public: int UnregisterNotify(Uri uri, sptr &observer); int UnregisterNotify(Uri uri); private: - int StartWatcher(Uri &uri); - int StopWatcher(Uri &uri, bool isUnregisterAll); sptr GetProxyByUri(Uri &uri); sptr GetProxyByBundleName(const std::string &bundleName); bool GetProxy(); diff --git a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h index 765d05a8..4a30083e 100644 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h @@ -75,7 +75,7 @@ public: virtual int GetRoots(std::vector &rootInfoVec) = 0; virtual int Access(const Uri &uri, bool &isExist) = 0; virtual int StartWatcher(const Uri &uri) = 0; - virtual int StopWatcher(const Uri &uri, bool isUnregisterAll) = 0; + virtual int StopWatcher(const Uri &uri) = 0; }; } // namespace FileAccessFwk } // namespace OHOS diff --git a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h index 17f9705a..bb18b297 100644 --- a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h @@ -78,7 +78,7 @@ public: int Access(const Uri &uri, bool &isExist) override; int Query(const Uri &uri, std::vector &columns, std::vector &results) override; int StartWatcher(const Uri &uri) override; - int StopWatcher(const Uri &uri, bool isUnregisterAll) override; + int StopWatcher(const Uri &uri) override; private: template diff --git a/interfaces/inner_api/file_access/libfile_access_extension_ability_kit.map b/interfaces/inner_api/file_access/libfile_access_extension_ability_kit.map index 87eedd9b..2bcb7a53 100644 --- a/interfaces/inner_api/file_access/libfile_access_extension_ability_kit.map +++ b/interfaces/inner_api/file_access/libfile_access_extension_ability_kit.map @@ -21,6 +21,7 @@ *OHOS::FileAccessFwk::FileAccessNotifyManager*; *OHOS::FileAccessFwk::FileAccessExtStub*; *OHOS::FileAccessFwk::FileAccessExtStubImpl*; + *OHOS::FileAccessFwk::FileAccessExtConnection*; }; local: *; diff --git a/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp index 74f60456..3bfc33a0 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp @@ -160,7 +160,7 @@ int FileAccessExtAbility::StartWatcher(const Uri &uri) return EPERM; } -int FileAccessExtAbility::StopWatcher(const Uri &uri, bool isUnregisterAll) +int FileAccessExtAbility::StopWatcher(const Uri &uri) { HILOG_ERROR("FileAccessExtAbility::StopWatcher Undefined operation"); return EPERM; diff --git a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp index f701609b..a8fd536d 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp @@ -907,7 +907,7 @@ int FileAccessExtProxy::StartWatcher(const Uri &uri) return ERR_OK; } -int FileAccessExtProxy::StopWatcher(const Uri &uri, bool isUnregisterAll) +int FileAccessExtProxy::StopWatcher(const Uri &uri) { UserAccessTracer trace; trace.Start("StopWatcher"); @@ -923,11 +923,6 @@ int FileAccessExtProxy::StopWatcher(const Uri &uri, bool isUnregisterAll) return E_IPCS; } - if (!data.WriteBool(isUnregisterAll)) { - HILOG_ERROR("fail to WriteBool isUnregisterAll"); - return E_IPCS; - } - MessageParcel reply; MessageOption option; int err = Remote()->SendRequest(CMD_STOP_WATCHER, data, reply, option); diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp index 18a28663..608b62ca 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp @@ -688,14 +688,8 @@ ErrCode FileAccessExtStub::CmdStopWatcher(MessageParcel &data, MessageParcel &re return EINVAL; } - bool isUnregisterAll = false; - if (!data.ReadBool(isUnregisterAll)) { - HILOG_ERROR("Parameter Copy fail to ReadBool isUnregisterAll"); - return E_IPCS; - } - Uri uri(uriString); - int ret = StopWatcher(uri, isUnregisterAll); + int ret = StopWatcher(uri); if (!reply.WriteInt32(ret)) { HILOG_ERROR("Parameter StopWatcher fail to WriteInt32 ret"); return E_IPCS; diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp index e389bbcb..63ce5110 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp @@ -245,7 +245,7 @@ int FileAccessExtStubImpl::StartWatcher(const Uri &uri) return ret; } -int FileAccessExtStubImpl::StopWatcher(const Uri &uri, bool isUnregisterAll) +int FileAccessExtStubImpl::StopWatcher(const Uri &uri) { UserAccessTracer trace; trace.Start("StopWatcher"); @@ -254,7 +254,7 @@ int FileAccessExtStubImpl::StopWatcher(const Uri &uri, bool isUnregisterAll) return E_IPCS; } - int ret = extension_->StopWatcher(uri, isUnregisterAll); + int ret = extension_->StopWatcher(uri); return ret; } } // namespace FileAccessFwk diff --git a/interfaces/inner_api/file_access/src/file_access_helper.cpp b/interfaces/inner_api/file_access/src/file_access_helper.cpp index 069a3b39..a1a12173 100644 --- a/interfaces/inner_api/file_access/src/file_access_helper.cpp +++ b/interfaces/inner_api/file_access/src/file_access_helper.cpp @@ -1105,44 +1105,6 @@ int FileAccessHelper::GetFileInfoFromRelativePath(std::string &selectFile, FileI return ERR_OK; } -int FileAccessHelper::StartWatcher(Uri &uri) -{ - UserAccessTracer trace; - trace.Start("StartWatcher"); - sptr fileExtProxy = GetProxyByUri(uri); - if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); - return E_IPCS; - } - - int ret = fileExtProxy->StartWatcher(uri); - if (ret != ERR_OK) { - HILOG_ERROR("Delete get result error, code:%{public}d", ret); - return ret; - } - - return ERR_OK; -} - -int FileAccessHelper::StopWatcher(Uri &uri, bool isUnregisterAll) -{ - UserAccessTracer trace; - trace.Start("StopWatcher"); - sptr fileExtProxy = GetProxyByUri(uri); - if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); - return E_IPCS; - } - - int ret = fileExtProxy->StopWatcher(uri, isUnregisterAll); - if (ret != ERR_OK) { - HILOG_ERROR("StopWatcher get result error, code:%{public}d", ret); - return ret; - } - - return ERR_OK; -} - int FileAccessHelper::RegisterNotify(Uri uri, bool notifyForDescendants, sptr &observer) { UserAccessTracer trace; @@ -1169,10 +1131,6 @@ int FileAccessHelper::RegisterNotify(Uri uri, bool notifyForDescendants, sptr &obser HILOG_ERROR("UnregisterNotify error ret = %{public}d", ret); return ret; } - - bool isUnregisterAll = false; - ret = StopWatcher(uri, isUnregisterAll); - if (ret != ERR_OK) { - HILOG_ERROR("StopWatcher error ret = %{public}d", ret); - } return ret; } @@ -1236,11 +1188,6 @@ int FileAccessHelper::UnregisterNotify(Uri uri) return ret; } - bool isUnregisterAll = true; - ret = StopWatcher(uri, isUnregisterAll); - if (ret != ERR_OK) { - HILOG_ERROR("StopWatcher error ret = %{public}d", ret); - } return ret; } diff --git a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp index 8147ff1b..aea5d6d5 100644 --- a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp @@ -1636,7 +1636,7 @@ int JsFileAccessExtAbility::StartWatcher(const Uri &uri) return ERR_OK; } -int JsFileAccessExtAbility::StopWatcher(const Uri &uri, bool isUnregisterAll) +int JsFileAccessExtAbility::StopWatcher(const Uri &uri) { UserAccessTracer trace; trace.Start("StopWatcher"); @@ -1646,7 +1646,7 @@ int JsFileAccessExtAbility::StopWatcher(const Uri &uri, bool isUnregisterAll) return E_GETRESULT; } - auto argParser = [uri, isUnregisterAll](napi_env &env, napi_value *argv, size_t &argc) -> bool { + auto argParser = [uri](napi_env &env, napi_value *argv, size_t &argc) -> bool { napi_value nativeUri = nullptr; napi_create_string_utf8(env, uri.ToString().c_str(), uri.ToString().length(), &nativeUri); if (nativeUri == nullptr) { @@ -1654,11 +1654,8 @@ int JsFileAccessExtAbility::StopWatcher(const Uri &uri, bool isUnregisterAll) return false; } - napi_value isCleanAll = nullptr; - napi_get_boolean(env, isUnregisterAll, &isCleanAll); argv[ARGC_ZERO] = nativeUri; - argv[ARGC_ONE] = isCleanAll; - argc = ARGC_TWO; + argc = ARGC_ONE; return true; }; diff --git a/services/BUILD.gn b/services/BUILD.gn index 0aa5c711..9cee6651 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -110,9 +110,14 @@ ohos_shared_library("file_access_service") { version_script = "libfile_access_service.map" public_configs = [ ":ability_public_config" ] + deps = [ + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", + ] + external_deps = [ "ability_base:want", "ability_base:zuri", + "ability_runtime:ability_manager", "access_token:libaccesstoken_sdk", "access_token:libtokenid_sdk", "c_utils:utils", diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 83671a90..7675145c 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -54,7 +54,6 @@ const TRASH_PATH = '/storage/.Trash/Users/100/'; const TRASH_SUB_FODER = '/oh_trash_content'; const EXTERNAL_PATH = '/storage/External'; let observerMap = new Map(); -let watcherCountMap = new Map(); let eventMap = new Map([ [CREATE_EVENT_CODE, CREATE_EVENT], [IN_DELETE_EVENT_CODE, DELETE_EVENT], @@ -1005,10 +1004,8 @@ export default class FileExtAbility extends Extension { }); watcher.start(); observerMap.set(uri, watcher); - watcherCountMap.set(uri, 1); } else { - let temp = watcherCountMap.get(uri) + 1; - watcherCountMap.set(uri, temp); + console.log('uri already exists'); } } catch (e) { hilog.error(DOMAIN_CODE, TAG, 'startWatcher error ' + e.message); @@ -1017,7 +1014,7 @@ export default class FileExtAbility extends Extension { return ERR_OK; } - stopWatcher(uri, isUnregisterAll): number { + stopWatcher(uri): number { uri = this.decode(uri); if (uri === '') { return { @@ -1029,23 +1026,14 @@ export default class FileExtAbility extends Extension { return E_URIS; } try { - if (!watcherCountMap.has(uri)) { + if (!observerMap.has(uri)) { return E_GETRESULT; } - if (isUnregisterAll) { - watcherCountMap.set(uri, 0); - } else { - let temp = watcherCountMap.get(uri) - 1; - watcherCountMap.set(uri, temp); - } - if (watcherCountMap.get(uri) === 0) { - watcherCountMap.delete(uri); let watcher = observerMap.get(uri); if (typeof watcher !== undefined) { watcher.stop(); observerMap.delete(uri); } - } } catch (e) { hilog.error(DOMAIN_CODE, TAG, 'stopWatcher error ' + e.message); return E_GETRESULT; diff --git a/services/native/file_access_service/include/file_access_service.h b/services/native/file_access_service/include/file_access_service.h index b34ca915..6911055b 100644 --- a/services/native/file_access_service/include/file_access_service.h +++ b/services/native/file_access_service/include/file_access_service.h @@ -25,6 +25,7 @@ #include "file_access_service_stub.h" #include "holder_manager.h" +#include "ifile_access_ext_base.h" #include "iremote_object.h" #include "uri.h" @@ -99,8 +100,10 @@ private: void SendListNotify(const std::vector list, NotifyMessage ¬ifyMessage); void RemoveRelations(std::string &uriStr, std::shared_ptr obsNode); int FindUri(const std::string &uriStr, std::shared_ptr &outObsNode); + int32_t ConnectExtension(); FileAccessService(); bool IsServiceReady() const; + sptr extensionProxy_{nullptr}; static sptr instance_; bool ready_ = false; static std::mutex mutex_; diff --git a/services/native/file_access_service/src/file_access_service.cpp b/services/native/file_access_service/src/file_access_service.cpp index c371240c..234aeecb 100644 --- a/services/native/file_access_service/src/file_access_service.cpp +++ b/services/native/file_access_service/src/file_access_service.cpp @@ -18,9 +18,11 @@ #include #include "user_access_tracer.h" #include "file_access_framework_errno.h" +#include "file_access_ext_connection.h" #include "hilog_wrapper.h" #include "hitrace_meter.h" #include "system_ability_definition.h" +#include "iservice_registry.h" using namespace std; namespace OHOS { @@ -113,6 +115,65 @@ static bool IsChildUri(const string &comparedUriStr, string &srcUriStr) return false; } +// static sptr getExtensionProxy() { +// auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); +// if (samgr == nullptr) { +// HILOG_ERROR("cjw Samgr is nullptr"); +// return nullptr; +// } + +// auto remote = samgr->GetSystemAbility(5003); +// if (remote == nullptr) { +// HILOG_ERROR("cjw get remote failed"); +// return nullptr; +// } + +// AAFwk::Want want; +// want.SetElementName("com.ohos.UserFile.ExternalFileManager", "FileExtensionAbility"); +// sptr fileAccessExtConnection(new(std::nothrow) FileAccessExtConnection()); +// if (fileAccessExtConnection == nullptr) { +// HILOG_ERROR("cjw new fileAccessExtConnection fail"); +// return nullptr; +// } + +// if (!fileAccessExtConnection->IsExtAbilityConnected()) { +// fileAccessExtConnection->ConnectFileExtAbility(want, remote); +// } +// return fileAccessExtConnection->GetFileExtProxy(); +// } + +int32_t FileAccessService::ConnectExtension() +{ + std::lock_guard lock(mutex_); + if (extensionProxy_ != nullptr) { + return ERR_OK; + } + auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgr == nullptr) { + HILOG_ERROR("cjw Samgr is nullptr"); + return E_CONNECT; + } + + auto remote = samgr->GetSystemAbility(5003); + if (remote == nullptr) { + HILOG_ERROR("cjw get remote failed"); + return E_CONNECT; + } + + AAFwk::Want want; + want.SetElementName("com.ohos.UserFile.ExternalFileManager", "FileExtensionAbility"); + sptr fileAccessExtConnection(new(std::nothrow) FileAccessExtConnection()); + if (fileAccessExtConnection == nullptr) { + HILOG_ERROR("cjw new fileAccessExtConnection fail"); + return E_CONNECT; + } + if (!fileAccessExtConnection->IsExtAbilityConnected()) { + fileAccessExtConnection->ConnectFileExtAbility(want, remote); + } + extensionProxy_ = fileAccessExtConnection->GetFileExtProxy(); + return ERR_OK; +} + int32_t FileAccessService::RegisterNotify(Uri uri, bool notifyForDescendants, const sptr &observer) { UserAccessTracer trace; @@ -154,6 +215,18 @@ int32_t FileAccessService::RegisterNotify(Uri uri, bool notifyForDescendants, co } obsNode->obsCodeList_.push_back(code); return ERR_OK; + } else { + if (ConnectExtension() != ERR_OK) { + HILOG_ERROR("cjw Creator get invalid fileExtProxy"); + return E_CONNECT; + } + extensionProxy_->StartWatcher(uri); + // auto fileExtProxy = getExtensionProxy(); + // if (fileExtProxy == nullptr) { + // HILOG_ERROR("cjw Creator get invalid fileExtProxy"); + // return E_CONNECT; + // } + // fileExtProxy->StartWatcher(uri); } obsNode = make_shared(notifyForDescendants); // add new node relations. @@ -218,6 +291,17 @@ int32_t FileAccessService::CleanAllNotify(Uri uri) obsManager_.release(code); } } + if (ConnectExtension() != ERR_OK) { + HILOG_ERROR("cjw Creator get invalid fileExtProxy"); + return E_CONNECT; + } + extensionProxy_->StopWatcher(uri); + // auto fileExtProxy = getExtensionProxy(); + // if (fileExtProxy == nullptr) { + // HILOG_ERROR("cjw Creator get invalid fileExtProxy"); + // return E_CONNECT; + // } + // fileExtProxy->StopWatcher(uri); RemoveRelations(uriStr, obsNode); return ERR_OK; } @@ -263,6 +347,17 @@ int32_t FileAccessService::UnregisterNotify(Uri uri, const sptrIsValid()) { obsManager_.release(code); } + if (ConnectExtension() != ERR_OK) { + HILOG_ERROR("cjw Creator get invalid fileExtProxy"); + return E_CONNECT; + } + extensionProxy_->StopWatcher(uri); + // auto fileExtProxy = getExtensionProxy(); + // if (fileExtProxy == nullptr) { + // HILOG_ERROR("cjw Creator get invalid fileExtProxy"); + // return E_CONNECT; + // } + // fileExtProxy->StopWatcher(uri); RemoveRelations(uriStr, obsNode); return ERR_OK; } diff --git a/services/native/file_access_service/src/file_access_service_proxy.cpp b/services/native/file_access_service/src/file_access_service_proxy.cpp index d3c1b3ac..0da67b46 100644 --- a/services/native/file_access_service/src/file_access_service_proxy.cpp +++ b/services/native/file_access_service/src/file_access_service_proxy.cpp @@ -14,17 +14,21 @@ */ #include "file_access_service_proxy.h" + +#include "bundle_constants.h" #include "user_access_tracer.h" #include "file_access_framework_errno.h" #include "file_access_service_ipc_interface_code.h" #include "hilog_wrapper.h" #include "hitrace_meter.h" +#include "ipc_skeleton.h" #include "iservice_registry.h" #include "system_ability_definition.h" namespace OHOS { namespace FileAccessFwk { constexpr int LOAD_SA_TIMEOUT_MS = 5000; +const std::string UID_TAG = "uid:"; sptr FileAccessServiceProxy::GetInstance() { HILOG_INFO("Getinstance"); @@ -81,6 +85,13 @@ void FileAccessServiceProxy::ServiceProxyLoadCallback::OnLoadSystemAbilityFail(i proxyConVar_.notify_one(); } +static int GetUserId() +{ + int uid = IPCSkeleton::GetCallingUid(); + int userId = uid / OHOS::AppExecFwk::Constants::BASE_USER_RANGE; + return userId; +} + int32_t FileAccessServiceProxy::OnChange(Uri uri, NotifyType notifyType) { UserAccessTracer trace; @@ -91,7 +102,8 @@ int32_t FileAccessServiceProxy::OnChange(Uri uri, NotifyType notifyType) return E_IPCS; } - if (!data.WriteParcelable(&uri)) { + Uri tempUri(UID_TAG + std::to_string(GetUserId()) + uri.ToString()); + if (!data.WriteParcelable(&tempUri)) { HILOG_ERROR("fail to WriteParcelable uri"); return E_IPCS; } @@ -130,7 +142,8 @@ int32_t FileAccessServiceProxy::RegisterNotify(Uri uri, bool notifyForDescendant return E_IPCS; } - if (!data.WriteParcelable(&uri)) { + Uri tempUri(UID_TAG + std::to_string(GetUserId()) + uri.ToString()); + if (!data.WriteParcelable(&tempUri)) { HILOG_ERROR("fail to WriteParcelable uri"); return E_IPCS; } @@ -193,7 +206,8 @@ int32_t FileAccessServiceProxy::UnregisterNotify(Uri uri, const sptr