From 0a39888f9d62cf2d07a50428e67440cb81a8e4cd Mon Sep 17 00:00:00 2001 From: zhouyan Date: Tue, 9 Sep 2025 09:59:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B8=E6=9C=BA=E6=BC=8F=E6=B4=9E=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E6=80=A7=E4=BF=AE=E6=94=B95.1.0=E6=8C=91=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhouyan Change-Id: If5fb1a1dd4145ba2642487bbe5157871398dbf65 --- .../include/record/permission_record_manager.h | 2 +- .../src/record/permission_record_manager.cpp | 14 +++++++++----- .../unittest/permission_record_manager_test.cpp | 5 ++++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/services/privacymanager/include/record/permission_record_manager.h b/services/privacymanager/include/record/permission_record_manager.h index 17f738733..9d5694ee9 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 057a37086..3216e71d3 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 ad105ad9e..0201f985a 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_); } -- Gitee