From 52a8c0240cd52e3a68146bc49925910c46a12abc Mon Sep 17 00:00:00 2001 From: wenjinchao Date: Sat, 15 Mar 2025 15:10:45 +0800 Subject: [PATCH 1/8] transfer to multi entry Signed-off-by: wenjinchao Change-Id: Ia1ec612a49a6784007df1d08d91f7c47d290efe6 --- .../service/udmf/BUILD.gn | 2 + .../service/udmf/udmf_service_impl.cpp | 40 +++++++++++++++++++ .../service/udmf/udmf_service_impl.h | 3 ++ 3 files changed, 45 insertions(+) diff --git a/services/distributeddataservice/service/udmf/BUILD.gn b/services/distributeddataservice/service/udmf/BUILD.gn index 5fd231303..58ccfac28 100644 --- a/services/distributeddataservice/service/udmf/BUILD.gn +++ b/services/distributeddataservice/service/udmf/BUILD.gn @@ -79,6 +79,8 @@ ohos_source_set("udmf_server") { "ability_runtime:uri_permission_mgr", "access_token:libtokenid_sdk", "app_file_service:remote_file_share_native", + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", "device_manager:devicemanagersdk", "hilog:libhilog", "hitrace:hitrace_meter", diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index fc75e80b0..1dcd49f6d 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -21,7 +21,10 @@ #include "tokenid_kit.h" #include "accesstoken_kit.h" +#include "bundlemgr/bundle_mgr_proxy.h" #include "checker_manager.h" +#include "bundle_info.h" +#include "iservice_registry.h" #include "lifecycle/lifecycle_manager.h" #include "log_print.h" #include "preprocess_utils.h" @@ -30,6 +33,7 @@ #include "udmf_radar_reporter.h" #include "device_manager_adapter.h" #include "store_account_observer.h" +#include "system_ability_definition.h" #include "utils/anonymous.h" #include "bootstrap.h" #include "metadata/store_meta_data.h" @@ -170,6 +174,7 @@ int32_t UdmfServiceImpl::GetData(const QueryOption &query, UnifiedData &unifiedD msg.appId = bundleName; res = RetrieveData(query, unifiedData); } + TransferToEntriesIfNeed(query, unifiedData); auto errFind = ERROR_MAP.find(res); msg.result = errFind == ERROR_MAP.end() ? "E_ERROR" : errFind->second; for (const auto &record : unifiedData.GetRecords()) { @@ -838,5 +843,40 @@ int32_t UdmfServiceImpl::OnUserChange(uint32_t code, const std::string &user, co } return Feature::OnUserChange(code, user, account); } + +void UdmfServiceImpl::TransferToEntriesIfNeed(const QueryOption &query, UnifiedData &unifiedData) +{ + auto samgrProxy = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgrProxy == nullptr) { + ZLOGE("Failed to get system ability mgr."); + return; + } + auto bundleMgrProxy = samgrProxy->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); + if (bundleMgrProxy == nullptr) { + ZLOGE("Failed to Get BMS SA."); + return; + } + auto bundleManager = iface_cast(bundleMgrProxy); + if (bundleManager == nullptr) { + ZLOGE("Failed to get bundle manager"); + return; + } + std::string bundleName; + PreProcessUtils::GetHapBundleNameByToken(query.tokenId, bundleName); + uint32_t token = IPCSkeleton::GetCallingFullTokenID(); + ZLOGI("token:0x%{public}x, bundleName:%{public}s", token, bundleName.c_str()); + int32_t userId = DistributedData::AccountDelegate::GetInstance()->GetUserByToken(token); + ZLOGI("userId is %{public}d", userId); + AppExecFwk::BundleInfo bundleInfo; + bundleManager->GetBundleInfoV9(bundleName, static_cast(AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_HAP_MODULE), bundleInfo, userId); + ZLOGI("hap module info size is %{public}zu", bundleInfo.hapModuleInfos.size()); + for (auto &hapModuleInfo : bundleInfo.hapModuleInfos) { + for (auto &deviceType : hapModuleInfo.deviceTypes) { + ZLOGI("device types size is %{public}zu", hapModuleInfo.deviceTypes.size()); + ZLOGI("deviceType: %{public}s", deviceType.c_str()); + } + } + unifiedData.TransferToEntries(); +} } // namespace UDMF } // namespace OHOS \ No newline at end of file diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index 93082d45a..136d650ae 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -19,6 +19,8 @@ #include "store_cache.h" #include "udmf_service_stub.h" #include "kv_store_delegate_manager.h" +#include "unified_data.h" +#include "unified_types.h" namespace OHOS { namespace UDMF { /* @@ -58,6 +60,7 @@ private: bool VerifyPermission(const std::string &permission, uint32_t callerTokenId); bool HasDatahubPriviledge(const std::string &bundleName); void RegisterAsyncProcessInfo(const std::string &businessUdKey); + void TransferToEntriesIfNeed(const QueryOption &query, UnifiedData &unifiedData); class Factory { public: -- Gitee From 8f1cb8b7b87fd504f3a0f9dd24841f285a8bbb79 Mon Sep 17 00:00:00 2001 From: wenjinchao Date: Sat, 15 Mar 2025 17:24:04 +0800 Subject: [PATCH 2/8] transfer to multi entry Signed-off-by: wenjinchao Change-Id: Ia1f334b30113968d3380ba0fd9008de25b316a59 --- .../service/udmf/udmf_service_impl.cpp | 31 +++++++++++-------- .../service/udmf/udmf_service_impl.h | 1 + 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 1dcd49f6d..a4fa87a13 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -35,6 +35,7 @@ #include "store_account_observer.h" #include "system_ability_definition.h" #include "utils/anonymous.h" +#include "unified_data_helper.h" #include "bootstrap.h" #include "metadata/store_meta_data.h" #include "metadata/meta_data_manager.h" @@ -845,38 +846,42 @@ int32_t UdmfServiceImpl::OnUserChange(uint32_t code, const std::string &user, co } void UdmfServiceImpl::TransferToEntriesIfNeed(const QueryOption &query, UnifiedData &unifiedData) +{ + if (Is2In1DeviceType(query)) { + UnifiedDataHelper::TransferToEntries(unifiedData); + } +} + +bool UdmfServiceImpl::Is2In1DeviceType(const QueryOption &query) { auto samgrProxy = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (samgrProxy == nullptr) { ZLOGE("Failed to get system ability mgr."); - return; + return false; } auto bundleMgrProxy = samgrProxy->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); if (bundleMgrProxy == nullptr) { ZLOGE("Failed to Get BMS SA."); - return; + return false; } auto bundleManager = iface_cast(bundleMgrProxy); if (bundleManager == nullptr) { ZLOGE("Failed to get bundle manager"); - return; + return false; } std::string bundleName; PreProcessUtils::GetHapBundleNameByToken(query.tokenId, bundleName); - uint32_t token = IPCSkeleton::GetCallingFullTokenID(); - ZLOGI("token:0x%{public}x, bundleName:%{public}s", token, bundleName.c_str()); - int32_t userId = DistributedData::AccountDelegate::GetInstance()->GetUserByToken(token); - ZLOGI("userId is %{public}d", userId); + int32_t userId = DistributedData::AccountDelegate::GetInstance()->GetUserByToken( + IPCSkeleton::GetCallingFullTokenID()); AppExecFwk::BundleInfo bundleInfo; - bundleManager->GetBundleInfoV9(bundleName, static_cast(AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_HAP_MODULE), bundleInfo, userId); - ZLOGI("hap module info size is %{public}zu", bundleInfo.hapModuleInfos.size()); + bundleManager->GetBundleInfoV9(bundleName, static_cast( + AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_HAP_MODULE), bundleInfo, userId); for (auto &hapModuleInfo : bundleInfo.hapModuleInfos) { - for (auto &deviceType : hapModuleInfo.deviceTypes) { - ZLOGI("device types size is %{public}zu", hapModuleInfo.deviceTypes.size()); - ZLOGI("deviceType: %{public}s", deviceType.c_str()); + if (hapModuleInfo.deviceTypes.size() == 1 && hapModuleInfo.deviceTypes[0] == "2in1") { + return true; } } - unifiedData.TransferToEntries(); + return false; } } // namespace UDMF } // namespace OHOS \ No newline at end of file diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index 136d650ae..d75c334fb 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -61,6 +61,7 @@ private: bool HasDatahubPriviledge(const std::string &bundleName); void RegisterAsyncProcessInfo(const std::string &businessUdKey); void TransferToEntriesIfNeed(const QueryOption &query, UnifiedData &unifiedData); + bool Is2In1DeviceType(const QueryOption &query); class Factory { public: -- Gitee From 796260b1f15875143901c42f0b6e59790ecd1653 Mon Sep 17 00:00:00 2001 From: wenjinchao Date: Mon, 17 Mar 2025 12:04:34 +0800 Subject: [PATCH 3/8] add Signed-off-by: wenjinchao Change-Id: I487ebc662c93e52ca80199e72900b381c3d2dd79 --- .../service/udmf/udmf_service_impl.cpp | 25 ++++++++++--------- .../service/udmf/udmf_service_impl.h | 2 -- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index a4fa87a13..bcc90f765 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -21,24 +21,24 @@ #include "tokenid_kit.h" #include "accesstoken_kit.h" +#include "bootstrap.h" +#include "bundle_info.h" #include "bundlemgr/bundle_mgr_proxy.h" #include "checker_manager.h" -#include "bundle_info.h" +#include "device_manager_adapter.h" #include "iservice_registry.h" #include "lifecycle/lifecycle_manager.h" #include "log_print.h" +#include "metadata/store_meta_data.h" +#include "metadata/meta_data_manager.h" #include "preprocess_utils.h" #include "reporter.h" -#include "uri_permission_manager.h" -#include "udmf_radar_reporter.h" -#include "device_manager_adapter.h" #include "store_account_observer.h" #include "system_ability_definition.h" -#include "utils/anonymous.h" +#include "uri_permission_manager.h" +#include "udmf_radar_reporter.h" #include "unified_data_helper.h" -#include "bootstrap.h" -#include "metadata/store_meta_data.h" -#include "metadata/meta_data_manager.h" +#include "utils/anonymous.h" namespace OHOS { namespace UDMF { @@ -55,6 +55,7 @@ constexpr const char *DATA_PREFIX = "udmf://"; constexpr const char *FILE_SCHEME = "file"; constexpr const char *PRIVILEGE_READ_AND_KEEP = "readAndKeep"; constexpr const char *MANAGE_UDMF_APP_SHARE_OPTION = "ohos.permission.MANAGE_UDMF_APP_SHARE_OPTION"; +constexpr const char *DEVICE_2IN1_TAG = "2in1"; constexpr const char *HAP_LIST[] = {"com.ohos.pasteboarddialog"}; __attribute__((used)) UdmfServiceImpl::Factory UdmfServiceImpl::factory_; UdmfServiceImpl::Factory::Factory() @@ -847,8 +848,8 @@ int32_t UdmfServiceImpl::OnUserChange(uint32_t code, const std::string &user, co void UdmfServiceImpl::TransferToEntriesIfNeed(const QueryOption &query, UnifiedData &unifiedData) { - if (Is2In1DeviceType(query)) { - UnifiedDataHelper::TransferToEntries(unifiedData); + if (unifiedData.IsNeedTransferToEntries() && Is2In1DeviceType(query)) { + unifiedData.TransferToEntries(unifiedData); } } @@ -876,8 +877,8 @@ bool UdmfServiceImpl::Is2In1DeviceType(const QueryOption &query) AppExecFwk::BundleInfo bundleInfo; bundleManager->GetBundleInfoV9(bundleName, static_cast( AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_HAP_MODULE), bundleInfo, userId); - for (auto &hapModuleInfo : bundleInfo.hapModuleInfos) { - if (hapModuleInfo.deviceTypes.size() == 1 && hapModuleInfo.deviceTypes[0] == "2in1") { + for (const auto &hapModuleInfo : bundleInfo.hapModuleInfos) { + if (hapModuleInfo.deviceTypes.size() == 1 && hapModuleInfo.deviceTypes[0] == DEVICE_2IN1_TAG) { return true; } } diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index d75c334fb..1a38c099a 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -19,8 +19,6 @@ #include "store_cache.h" #include "udmf_service_stub.h" #include "kv_store_delegate_manager.h" -#include "unified_data.h" -#include "unified_types.h" namespace OHOS { namespace UDMF { /* -- Gitee From e6654579b9ee2089a609c08cb93c6bd03a093d82 Mon Sep 17 00:00:00 2001 From: wenjinchao Date: Mon, 17 Mar 2025 16:22:21 +0800 Subject: [PATCH 4/8] add Signed-off-by: wenjinchao Change-Id: I45368cfed640157f5c50244311c56b009745887c --- services/distributeddataservice/service/test/BUILD.gn | 3 +++ .../service/test/fuzztest/udmfservice_fuzzer/BUILD.gn | 1 + 2 files changed, 4 insertions(+) diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index 9b359e5aa..839323ef9 100755 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -930,6 +930,7 @@ ohos_unittest("UdmfRunTimeStoreTest") { "image_framework:image", "ipc:ipc_core", "kv_store:distributeddata_inner", + "samgr:samgr_proxy", "udmf:udmf_client", ] @@ -1195,6 +1196,7 @@ ohos_unittest("UdmfServiceImplTest") { "kv_store:distributeddata_inner", "kv_store:distributeddb", "relational_store:native_rdb", + "samgr:samgr_proxy", "udmf:udmf_client", ] } @@ -1231,6 +1233,7 @@ ohos_unittest("UdmfServiceStubTest") { "kv_store:distributeddata_inner", "kv_store:distributeddb", "relational_store:native_rdb", + "samgr:samgr_proxy", "udmf:udmf_client", ] } diff --git a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn index e3e58f256..5f4288864 100644 --- a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn +++ b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn @@ -64,6 +64,7 @@ ohos_fuzztest("UdmfServiceFuzzTest") { "kv_store:distributeddata_inner", "kv_store:distributeddata_mgr", "kv_store:distributeddb", + "samgr:samgr_proxy", "udmf:udmf_client", ] } -- Gitee From a84686678fd0a3cd58df38b60d1dcf879f96e3ab Mon Sep 17 00:00:00 2001 From: wenjinchao Date: Mon, 17 Mar 2025 16:42:46 +0800 Subject: [PATCH 5/8] add Signed-off-by: wenjinchao Change-Id: Ia409e5a743ed3d6c040b4b8df0881b83184e8824 --- services/distributeddataservice/service/test/BUILD.gn | 1 + 1 file changed, 1 insertion(+) diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index 839323ef9..484477399 100755 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -1313,6 +1313,7 @@ ohos_unittest("UdmfServiceStubMockTest") { "kv_store:distributeddata_inner", "kv_store:distributeddb", "relational_store:native_rdb", + "samgr:samgr_proxy", "udmf:udmf_client", ] } -- Gitee From 7a797e9b0c57a640b7d3eae4e1ff70c29e55c587 Mon Sep 17 00:00:00 2001 From: wenjinchao Date: Mon, 17 Mar 2025 20:45:39 +0800 Subject: [PATCH 6/8] add Signed-off-by: wenjinchao Change-Id: I8643e91a66f4b01f1f569c511a10bdeff0ec065a --- services/distributeddataservice/service/test/BUILD.gn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index 484477399..9b66eb587 100755 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -1187,6 +1187,7 @@ ohos_unittest("UdmfServiceImplTest") { "ability_runtime:uri_permission_mgr", "access_token:libaccesstoken_sdk", "app_file_service:remote_file_share_native", + "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", "c_utils:utils", "device_manager:devicemanagersdk", @@ -1225,6 +1226,7 @@ ohos_unittest("UdmfServiceStubTest") { "ability_runtime:uri_permission_mgr", "access_token:libaccesstoken_sdk", "app_file_service:remote_file_share_native", + "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", "c_utils:utils", "device_manager:devicemanagersdk", @@ -1302,6 +1304,7 @@ ohos_unittest("UdmfServiceStubMockTest") { "access_token:libtoken_setproc", "access_token:libtokenid_sdk", "app_file_service:remote_file_share_native", + "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", "c_utils:utils", "device_manager:devicemanagersdk", -- Gitee From c1ded59b2cd679e4924d4a8f7776df9090e94be2 Mon Sep 17 00:00:00 2001 From: wenjinchao Date: Mon, 17 Mar 2025 20:46:19 +0800 Subject: [PATCH 7/8] add Signed-off-by: wenjinchao Change-Id: I196d94867392deda2c4cf7548eede0be1f571887 --- .../service/test/fuzztest/udmfservice_fuzzer/BUILD.gn | 1 + 1 file changed, 1 insertion(+) diff --git a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn index 5f4288864..6b0a7d2bd 100644 --- a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn +++ b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn @@ -57,6 +57,7 @@ ohos_fuzztest("UdmfServiceFuzzTest") { "ability_runtime:uri_permission_mgr", "access_token:libaccesstoken_sdk", "access_token:libtoken_setproc", + "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", "c_utils:utils", "hilog:libhilog", -- Gitee From 6b7ed8966a1400340ae23b0a33b42fd0ff39fff3 Mon Sep 17 00:00:00 2001 From: wenjinchao Date: Mon, 17 Mar 2025 20:47:39 +0800 Subject: [PATCH 8/8] add Signed-off-by: wenjinchao Change-Id: I456f76a17f221949c4aa630d2e70b9b62805c1d9 --- services/distributeddataservice/service/test/BUILD.gn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index 9b66eb587..0cf859a24 100755 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -922,6 +922,8 @@ ohos_unittest("UdmfRunTimeStoreTest") { "access_token:libaccesstoken_sdk", "access_token:libnativetoken", "access_token:libtoken_setproc", + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", "c_utils:utils", "dataclassification:data_transit_mgr", "dsoftbus:softbus_client", -- Gitee