diff --git a/services/implementation/include/device_manager_service_impl.h b/services/implementation/include/device_manager_service_impl.h index c69db3f78e55b2e57e5b1dad1e32d3a59072d3ae..9fb44f2563ddeabda097834f49bbc93bcd60860c 100644 --- a/services/implementation/include/device_manager_service_impl.h +++ b/services/implementation/include/device_manager_service_impl.h @@ -269,11 +269,14 @@ private: std::map &delProfileMap, std::vector> &delACLInfoVec, std::vector &userIdVec); - void DeleteAclByTokenId(const int32_t &accessTokenId, + void GetDelACLInfoVec(const int32_t &accessTokenId, std::vector &profiles, - std::map &delProfileMap, std::vector> &delACLInfoVec, std::vector &userIdVec, - const uint32_t &userId, const std::string &localUdid); + const uint32_t &userId); + + void DeleteAclByDelProfileMap( + const std::map &delProfileMap, + std::vector &profiles, const std::string &localUdid); bool CheckLnnAcl(DistributedDeviceProfile::AccessControlProfile delProfile, DistributedDeviceProfile::AccessControlProfile lastprofile); diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 314cdf47b98790973bb9de2b2829fcf29c0e3f5e..7035cd1631a04f736ccf5fb17021615f9d219d0b 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -2245,18 +2245,7 @@ int32_t DeviceManagerServiceImpl::ProcessAppUninstall(int32_t userId, int32_t ac std::string localUdid = std::string(localDeviceId); std::vector> delACLInfoVec; std::vector userIdVec; - std::map delProfileMap; - DeleteAclByTokenId(accessTokenId, profiles, delProfileMap, delACLInfoVec, userIdVec, userId, localUdid); - for (auto item : delProfileMap) { - DmOfflineParam lnnAclParam; - bool isLastLnnAcl = false; - for (auto it : profiles) { - CheckIsLastLnnAcl(it, item.second, lnnAclParam, isLastLnnAcl, localUdid); - } - if (!isLastLnnAcl) { - DeleteSkCredAndAcl(lnnAclParam.needDelAclInfos); - } - } + GetDelACLInfoVec(accessTokenId, profiles, delACLInfoVec, userIdVec, userId); if (delACLInfoVec.size() == 0 || userIdVec.size() == 0) { return DM_OK; @@ -2352,12 +2341,15 @@ void DeviceManagerServiceImpl::DeleteAclByTokenId(const int32_t accessTokenId, } } -void DeviceManagerServiceImpl::DeleteAclByTokenId(const int32_t &accessTokenId, +void DeviceManagerServiceImpl::GetDelACLInfoVec(const int32_t &accessTokenId, std::vector &profiles, - std::map &delProfileMap, std::vector> &delACLInfoVec, std::vector &userIdVec, - const uint32_t &userId, const std::string &localUdid) + const uint32_t &userId) { + std::map delProfileMap; + char localDeviceId[DEVICE_UUID_LENGTH] = {0}; + GetDevUdid(localDeviceId, DEVICE_UUID_LENGTH); + std::string localUdid = std::string(localDeviceId); for (auto &item : profiles) { int64_t accesssertokenId = item.GetAccesser().GetAccesserTokenId(); int64_t accessseetokenId = item.GetAccessee().GetAccesseeTokenId(); @@ -2372,11 +2364,10 @@ void DeviceManagerServiceImpl::DeleteAclByTokenId(const int32_t &accessTokenId, delProfileMap[item.GetAccessControlId()] = item; DeviceProfileConnector::GetInstance().CacheAcerAclId(item, offlineParam.needDelAclInfos); DeleteSkCredAndAcl(offlineParam.needDelAclInfos); - listener_->OnAppUnintall(item.GetAccesser().GetAccesserBundleName()); if (item.GetBindLevel() == USER) { - userIdVec.push_back(item.GetAccesser().GetAccesserUserId()); - delACLInfoVec.push_back(std::pair(item.GetAccesser().GetAccesserUserId(), - item.GetAccessee().GetAccesseeDeviceId())); + userIdVec.push_back(item.GetAccessee().GetAccesseeUserId()); + delACLInfoVec.push_back(std::pair(item.GetAccessee().GetAccesseeUserId(), + item.GetAccesser().GetAccesserDeviceId())); } } if (accessTokenId == static_cast(accessseetokenId) && @@ -2386,14 +2377,20 @@ void DeviceManagerServiceImpl::DeleteAclByTokenId(const int32_t &accessTokenId, DeviceProfileConnector::GetInstance().CacheAceeAclId(item, offlineParam.needDelAclInfos); delProfileMap[item.GetAccessControlId()] = item; DeleteSkCredAndAcl(offlineParam.needDelAclInfos); - listener_->OnAppUnintall(item.GetAccessee().GetAccesseeBundleName()); if (item.GetBindLevel() == USER) { - userIdVec.push_back(item.GetAccessee().GetAccesseeUserId()); - delACLInfoVec.push_back(std::pair(item.GetAccessee().GetAccesseeUserId(), - item.GetAccesser().GetAccesserDeviceId())); + userIdVec.push_back(item.GetAccesser().GetAccesserUserId()); + delACLInfoVec.push_back(std::pair(item.GetAccesser().GetAccesserUserId(), + item.GetAccessee().GetAccesseeDeviceId())); } } } + DeleteAclByDelProfileMap(delProfileMap, profiles, localUdid); +} + +void DeviceManagerServiceImpl::DeleteAclByDelProfileMap( + const std::map &delProfileMap, + std::vector &profiles, const std::string &localUdid) +{ for (auto item : delProfileMap) { for (auto it = profiles.begin(); it != profiles.end();) { if (item.first == it->GetAccessControlId()) { @@ -2403,6 +2400,16 @@ void DeviceManagerServiceImpl::DeleteAclByTokenId(const int32_t &accessTokenId, } } } + for (auto item : delProfileMap) { + DmOfflineParam lnnAclParam; + bool isLastLnnAcl = false; + for (auto it : profiles) { + CheckIsLastLnnAcl(it, item.second, lnnAclParam, isLastLnnAcl, localUdid); + } + if (!isLastLnnAcl) { + DeleteSkCredAndAcl(lnnAclParam.needDelAclInfos); + } + } } bool DeviceManagerServiceImpl::CheckLnnAcl(DistributedDeviceProfile::AccessControlProfile delProfile, diff --git a/services/service/include/relationshipsyncmgr/dm_transport_msg.h b/services/service/include/relationshipsyncmgr/dm_transport_msg.h index c53abee8be65aeacf39d83d112323f1d5ba54abf..755c3a9e23b02b518c3831153adf573d6b3ca42a 100644 --- a/services/service/include/relationshipsyncmgr/dm_transport_msg.h +++ b/services/service/include/relationshipsyncmgr/dm_transport_msg.h @@ -81,7 +81,7 @@ struct UninstAppMsg { int32_t userId_; int32_t tokenId_; UninstAppMsg() : userId_(-1), tokenId_(-1) {} - UninstAppMsg(const int32_t &userId, const int32_t &tokenId) + UninstAppMsg(int32_t userId, int32_t tokenId) : userId_(userId), tokenId_(tokenId) {} }; @@ -94,7 +94,7 @@ struct UnBindAppMsg { std::string extra_; std::string udid_; UnBindAppMsg() : userId_(-1), tokenId_(-1), extra_(""), udid_("") {} - UnBindAppMsg(const int32_t &userId, const int32_t &tokenId, const std::string &extra, const std::string &udid) + UnBindAppMsg(int32_t userId, int32_t tokenId, const std::string &extra, const std::string &udid) : userId_(userId), tokenId_(tokenId), extra_(extra), udid_(udid) {} }; diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index 9daf9e13f0d59574e343826ac1bfae5a14048d5a..3060aefd0d78bc857fd6bc50f6b9d6cb260c8756 100644 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -3472,7 +3472,7 @@ void DeviceManagerService::NotifyRemoteUninstallApp(int32_t userId, int32_t toke } } if (!bleUdids.empty()) { - SendAppUnInstallBroadCast(peerUdids, userId, tokenId); + SendAppUnInstallBroadCast(bleUdids, userId, tokenId); } if (!wifiDevices.empty()) { NotifyRemoteUninstallAppByWifi(userId, tokenId, wifiDevices);