diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index bcfc2a8f19f11b16d57bd4e83830b02764b58d38..d14d6420768829c3a926b454f8eea59e22b4af96 100644 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -3959,6 +3959,20 @@ void DeviceManagerService::HandleUserSwitchedEvent(int32_t currentUserId, int32_ void DeviceManagerService::HandleUserStopEvent(int32_t stopUserId) { LOGI("stopUserId %{public}s.", GetAnonyInt32(stopUserId).c_str()); + std::vector foregroundUserVec; + int32_t retFront = MultipleUserConnector::GetForegroundUserIds(foregroundUserVec); + std::vector backgroundUserVec; + int32_t retBack = MultipleUserConnector::GetBackgroundUserIds(backgroundUserVec); + MultipleUserConnector::ClearLockedUser(foregroundUserVec, backgroundUserVec); + if (retFront != DM_OK || retBack != DM_OK) { + LOGE("retFront: %{public}d, retBack: %{public}d, frontuserids: %{public}s, backuserids: %{public}s", + retFront, retBack, GetIntegerList(foregroundUserVec).c_str(), GetIntegerList(backgroundUserVec).c_str()); + return; + } + if (!IsUserStatusChanged(foregroundUserVec, backgroundUserVec)) { + LOGI("User status has not changed."); + return; + } std::vector stopUserVec; stopUserVec.push_back(stopUserId); char localUdidTemp[DEVICE_UUID_LENGTH] = {0};