diff --git a/services/privacymanager/src/common/privacy_common_event_subscriber.cpp b/services/privacymanager/src/common/privacy_common_event_subscriber.cpp index ea330799f076582ac39a9204fae324b409f6070d..73b239617ca5f7d4cfa0366a6c0f0949fc06727d 100644 --- a/services/privacymanager/src/common/privacy_common_event_subscriber.cpp +++ b/services/privacymanager/src/common/privacy_common_event_subscriber.cpp @@ -82,6 +82,8 @@ void PrivacyCommonEventSubscriber::OnReceiveEvent(const EventFwk::CommonEventDat } else if (action == EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_LOCKED) { PermissionRecordManager::GetInstance().SetLockScreenStatus(LockScreenStatusChangeType::PERM_ACTIVE_IN_LOCKED); PermissionRecordManager::GetInstance().ExecuteAllCameraExecuteCallback(); + } else if (action == EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_OFF) { + PermissionRecordManager::GetInstance().ExecuteDeletePermissionRecordTask(); } else if (action == EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_REMOVED || action == EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_FULLY_REMOVED) { uint32_t tokenId = static_cast(want.GetParams().GetIntParam("accessTokenId", 0)); diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index bd95284b46265fd39186f23b63fe305bb98dd85e..2422077542b6ec4bb7ae58182ecd642f545520f2 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -277,7 +277,7 @@ int32_t PermissionRecordManager::AddRecord(const PermissionRecord& record) std::lock_guard lock(permUsedRecMutex_); auto it = permUsedRecList_.begin(); while (it != permUsedRecList_.end()) { - if (it->record.timestamp > updateStamp) { + if ((it->record.timestamp > updateStamp) && (it->record.opCode != record.opCode)) { // record from cache less than updateStamp may merge, ignore them ++it; continue; @@ -433,8 +433,6 @@ int32_t PermissionRecordManager::AddPermissionUsedRecord(const AddPermParamInfo& return Constant::SUCCESS; } - ExecuteDeletePermissionRecordTask(); - if ((info.successCount == 0) && (info.failCount == 0)) { return PrivacyError::ERR_PARAM_INVALID; } @@ -646,8 +644,6 @@ void PermissionRecordManager::RemovePermissionUsedRecords(AccessTokenID tokenId) int32_t PermissionRecordManager::GetPermissionUsedRecords( const PermissionUsedRequest& request, PermissionUsedResult& result) { - ExecuteDeletePermissionRecordTask(); - if (!request.isRemote && !GetRecordsFromLocalDB(request, result)) { ACCESSTOKEN_LOG_ERROR(LABEL, "Failed to GetRecordsFromLocalDB"); return PrivacyError::ERR_PARAM_INVALID; @@ -880,6 +876,7 @@ bool PermissionRecordManager::CreateBundleUsedRecord(const AccessTokenID tokenId return true; } +// call this when receive screen off common event void PermissionRecordManager::ExecuteDeletePermissionRecordTask() { if (GetCurDeleteTaskNum() > 1) { @@ -1370,8 +1367,6 @@ int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeIn int32_t PermissionRecordManager::StopUsingPermission( AccessTokenID tokenId, int32_t pid, const std::string& permissionName, int32_t callerPid) { - ExecuteDeletePermissionRecordTask(); - if (AccessTokenKit::GetTokenTypeFlag(tokenId) != TOKEN_HAP) { ACCESSTOKEN_LOG_DEBUG(LABEL, "Not hap(%{public}d).", tokenId); return PrivacyError::ERR_PARAM_INVALID;