diff --git a/services/privacymanager/include/record/permission_record_manager.h b/services/privacymanager/include/record/permission_record_manager.h index 17f738733380a00281e40aa39a4eaf0cbe49d2e1..9d5694ee9057add1cfad46e8c4db445551979bb6 100644 --- a/services/privacymanager/include/record/permission_record_manager.h +++ b/services/privacymanager/include/record/permission_record_manager.h @@ -173,7 +173,7 @@ private: void ModifyMuteStatus(const std::string& permissionName, int32_t index, bool isMute); bool GetMuteStatus(const std::string& permissionName, int32_t index); - void ExecuteCameraCallbackAsync(AccessTokenID tokenId, int32_t pid); + void ExecuteCameraCallbackAsync(AccessTokenID callbackTokenId, int32_t pid); void TransformEnumToBitValue(const PermissionUsedType type, uint32_t& value); bool AddOrUpdateUsedTypeIfNeeded(const AccessTokenID tokenId, const int32_t opCode, diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index 057a37086d853ae3509afe99d892c88c94822eba..3216e71d31135f7f84778b7837f16a63c095e199 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -1018,7 +1018,11 @@ void PermissionRecordManager::ExecuteAndUpdateRecord(uint32_t tokenId, int32_t p void PermissionRecordManager::NotifyAppStateChange(AccessTokenID tokenId, int32_t pid, ActiveChangeType status) { LOGI(PRI_DOMAIN, PRI_TAG, "Id %{public}u, pid %{public}d, status %{public}d", tokenId, pid, status); - // find permissions from startRecordList_ by tokenId which status diff from currStatus + + if (GetAppStatus(tokenId) != ActiveChangeType::PERM_ACTIVE_IN_BACKGROUND) { + return; + } + ExecuteAndUpdateRecord(tokenId, pid, status); } @@ -1271,15 +1275,15 @@ void PermissionRecordManager::ExecuteAllCameraExecuteCallback() this->cameraCallbackMap_.Iterate(it); } -void PermissionRecordManager::ExecuteCameraCallbackAsync(AccessTokenID tokenId, int32_t pid) +void PermissionRecordManager::ExecuteCameraCallbackAsync(AccessTokenID callbackTokenId, int32_t pid) { LOGD(PRI_DOMAIN, PRI_TAG, "Entry."); - auto task = [tokenId, pid, this]() { - uint64_t uniqueId = GetUniqueId(tokenId, pid); + auto task = [callbackTokenId, pid, this]() { LOGI(PRI_DOMAIN, PRI_TAG, "ExecuteCameraCallbackAsync task called."); auto it = [&](uint64_t id, sptr cameraCallback) { + AccessTokenID tokenId = static_cast(id & 0x00000000FFFFFFFF); auto callback = iface_cast(cameraCallback); - if ((uniqueId == id) && (callback != nullptr)) { + if ((callbackTokenId == tokenId) && (callback != nullptr)) { LOGI(PRI_DOMAIN, PRI_TAG, "CameraCallback tokenId(%{public}u) pid( %{public}d) changeType %{public}d", tokenId, pid, PERM_INACTIVE); callback->StateChangeNotify(tokenId, false); diff --git a/services/privacymanager/test/unittest/permission_record_manager_test.cpp b/services/privacymanager/test/unittest/permission_record_manager_test.cpp index ad105ad9ee852f08b9dda0cf2bebd4700896b3ff..0201f985aabb76ce386d7ca5575ba915c05a66d9 100644 --- a/services/privacymanager/test/unittest/permission_record_manager_test.cpp +++ b/services/privacymanager/test/unittest/permission_record_manager_test.cpp @@ -616,11 +616,14 @@ HWTEST_F(PermissionRecordManagerTest, StartUsingPermissionTest009, TestSize.Leve appStateObserver_->OnAppStateChanged(appStateData); usleep(500000); // 500000us = 0.5s ASSERT_FALSE(callbackPtr1->isShow_); - ASSERT_TRUE(callbackPtr2->isShow_); + ASSERT_FALSE(callbackPtr2->isShow_); + callbackPtr1->isShow_ = true; + callbackPtr2->isShow_ = true; appStateData.pid = TEST_PID_2; appStateObserver_->OnAppStateChanged(appStateData); usleep(500000); // 500000us = 0.5s + ASSERT_FALSE(callbackPtr1->isShow_); ASSERT_FALSE(callbackPtr2->isShow_); }