From a8b2e06a6887dd2816b73924f7c861354956afe9 Mon Sep 17 00:00:00 2001 From: weiyuantian Date: Fri, 12 Sep 2025 17:31:26 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E9=80=9A=E8=AF=9D=E6=BC=8F=E9=9F=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: weiyuantian --- .../domain/interrupt/include/audio_interrupt_service.h | 1 + .../domain/interrupt/src/audio_interrupt_service.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/services/audio_policy/server/domain/interrupt/include/audio_interrupt_service.h b/services/audio_policy/server/domain/interrupt/include/audio_interrupt_service.h index e42c36c7e0..204a1dedde 100644 --- a/services/audio_policy/server/domain/interrupt/include/audio_interrupt_service.h +++ b/services/audio_policy/server/domain/interrupt/include/audio_interrupt_service.h @@ -366,6 +366,7 @@ private: AudioStreamType defaultVolumeType_ = STREAM_MUSIC; std::mutex audioServerProxyMutex_; + std::unordered_set mutedGameSessionId_; }; } // namespace AudioStandard } // namespace OHOS diff --git a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp index 3796a938da..aa42bdc778 100644 --- a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp +++ b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp @@ -832,6 +832,9 @@ int32_t AudioInterruptService::UnsetAudioInterruptCallback(const int32_t zoneId, bool AudioInterruptService::AudioInterruptIsActiveInFocusList(const int32_t zoneId, const uint32_t incomingStreamId) { + if (mutedGameSessionId_.find(incomingStreamId) != mutedGameSessionId_.end()) { + return true; + } auto itZone = zonesMap_.find(zoneId); if (itZone == zonesMap_.end()) { AUDIO_ERR_LOG("Can not find zoneid"); @@ -2874,6 +2877,13 @@ bool AudioInterruptService::ShouldCallbackToClient(uint32_t uid, int32_t streamI std::string identity = IPCSkeleton::ResetCallingIdentity(); CHECK_AND_RETURN_RET_LOG(gsp != nullptr, true, "error for g_adProxy null"); AUDIO_INFO_LOG("mute flag is: %{public}d", muteFlag); + if (muteFlag) { + mutedGameSessionId_.insert(streamId); + } else { + if (mutedGameSessionId_.find(streamId) != mutedGameSessionId_.end()) { + mutedGameSessionId_.erase(streamId); + } + } gsp->SetNonInterruptMute(streamId, muteFlag); IPCSkeleton::SetCallingIdentity(identity); return false; -- Gitee From b93a9c1e75e356bd56cd4322e299c2d78a0e63b7 Mon Sep 17 00:00:00 2001 From: weiyuantian Date: Sat, 13 Sep 2025 10:10:38 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E9=80=9A=E8=AF=9D=E6=BC=8F=E9=9F=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: weiyuantian --- ...dio_interrupt_service_second_unit_test.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp index 1cfb39971d..d2381dce43 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp @@ -1808,6 +1808,10 @@ HWTEST(AudioInterruptServiceSecondUnitTest, AudioInterruptService_064, TestSize. ret = audioInterruptService->ShouldCallbackToClient(uid, streamId, interruptEvent); EXPECT_EQ(false, ret); + interruptEvent.hintType = INTERRUPT_HINT_RESUME; + ret = audioInterruptService->ShouldCallbackToClient(uid, streamId, interruptEvent); + EXPECT_EQ(false, ret); + interruptEvent.hintType = INTERRUPT_HINT_MUTE; ret = audioInterruptService->ShouldCallbackToClient(uid, streamId, interruptEvent); EXPECT_EQ(false, ret); @@ -1862,5 +1866,22 @@ HWTEST(AudioInterruptServiceSecondUnitTest, AudioInterruptService_066, TestSize. audioInterruptService->RemoveClient(zoneId, streamId); EXPECT_EQ(false, audioInterrupt.isAudioSessionInterrupt); } + +/** + * @tc.name : Test AudioInterruptService + * @tc.number: AudioInterruptService_071 + * @tc.desc : Test AudioInterruptIsActiveInFocusList +*/ +HWTEST(AudioInterruptServiceSecondUnitTest, AudioInterruptService_071, TestSize.Level1) +{ + auto audioInterruptService = std::make_shared(); + ASSERT_NE(audioInterruptService, nullptr); + + uint32_t streamId = 1; + int32_t zoneId = 0; + audioInterruptService->mutedGameSessionId_.insert(streamId); + auto ret = audioInterruptService->AudioInterruptIsActiveInFocusList(zoneId, streamId); + EXPECT_EQ(ret, true); +} } // namespace AudioStandard } // namespace OHOS -- Gitee From 1f09b9e3b1d991c3d41da7ea53cf33d5c2d9bab4 Mon Sep 17 00:00:00 2001 From: weiyuantian Date: Sat, 13 Sep 2025 16:15:37 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E9=80=9A=E8=AF=9D=E6=BC=8F=E9=9F=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: weiyuantian --- .../interrupt/src/audio_interrupt_service.cpp | 16 ++++++++++++--- ...dio_interrupt_service_second_unit_test.cpp | 20 +++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp index aa42bdc778..f50fcb39e6 100644 --- a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp +++ b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp @@ -832,9 +832,6 @@ int32_t AudioInterruptService::UnsetAudioInterruptCallback(const int32_t zoneId, bool AudioInterruptService::AudioInterruptIsActiveInFocusList(const int32_t zoneId, const uint32_t incomingStreamId) { - if (mutedGameSessionId_.find(incomingStreamId) != mutedGameSessionId_.end()) { - return true; - } auto itZone = zonesMap_.find(zoneId); if (itZone == zonesMap_.end()) { AUDIO_ERR_LOG("Can not find zoneid"); @@ -850,6 +847,16 @@ bool AudioInterruptService::AudioInterruptIsActiveInFocusList(const int32_t zone if (iter != audioFocusInfoList.end()) { return true; } + auto isPresentPause = [incomingStreamId] (const std::pair &pair) { + return pair.first.streamId == incomingStreamId && (pair.second == PAUSE); + }; + if (mutedGameSessionId_.find(incomingStreamId) != mutedGameSessionId_.end()) { + auto iter = std::find_if(audioFocusInfoList.begin(), audioFocusInfoList.end(), isPresentPause); + if (iter != audioFocusInfoList.end()) { + return true; + } + } + return false; } @@ -1013,6 +1020,9 @@ void AudioInterruptService::ResetNonInterruptControl(AudioInterrupt audioInterru if (!IsGameAvoidCallbackCase(audioInterrupt)) { return; } + if (mutedGameSessionId_.find(streamId) != mutedGameSessionId_.end()) { + mutedGameSessionId_.erase(streamId); + } AUDIO_INFO_LOG("Reset non-interrupt control for %{public}u", audioInterrupt.streamId); const sptr gsp = GetAudioServerProxy(); std::string identity = IPCSkeleton::ResetCallingIdentity(); diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp index d2381dce43..3e82cff0cc 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp @@ -1876,12 +1876,28 @@ HWTEST(AudioInterruptServiceSecondUnitTest, AudioInterruptService_071, TestSize. { auto audioInterruptService = std::make_shared(); ASSERT_NE(audioInterruptService, nullptr); - uint32_t streamId = 1; int32_t zoneId = 0; - audioInterruptService->mutedGameSessionId_.insert(streamId); auto ret = audioInterruptService->AudioInterruptIsActiveInFocusList(zoneId, streamId); + EXPECT_EQ(ret, false); + auto audioInterruptZone = make_shared(); + AudioInterrupt audioInterrupt; + audioInterrupt.streamId = streamId; + audioInterruptZone->audioFocusInfoList.push_back({audioInterrupt, ACTIVE}); + audioInterruptService->zonesMap_[0] = audioInterruptZone; + ret = audioInterruptService->AudioInterruptIsActiveInFocusList(zoneId, streamId); EXPECT_EQ(ret, true); + audioInterruptService->mutedGameSessionId_.insert(streamId); + audioInterruptZone->audioFocusInfoList.clear(); + audioInterruptZone->audioFocusInfoList.push_back({audioInterrupt, PAUSE}); + audioInterruptService->zonesMap_[0] = audioInterruptZone; + ret = audioInterruptService->AudioInterruptIsActiveInFocusList(zoneId, streamId); + EXPECT_EQ(ret, true); + audioInterruptZone->audioFocusInfoList.clear(); + audioInterruptService->mutedGameSessionId_.clear(); + audioInterruptService->zonesMap_[0] = audioInterruptZone; + ret = audioInterruptService->AudioInterruptIsActiveInFocusList(zoneId, streamId); + EXPECT_EQ(ret, false); } } // namespace AudioStandard } // namespace OHOS -- Gitee From 1d3991e42161c8010fa86fabc72107a369e76daf Mon Sep 17 00:00:00 2001 From: weiyuantian Date: Sat, 13 Sep 2025 16:29:30 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E9=80=9A=E8=AF=9D=E6=BC=8F=E9=9F=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: weiyuantian --- .../server/domain/interrupt/src/audio_interrupt_service.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp index f50fcb39e6..29c9ba7d00 100644 --- a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp +++ b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp @@ -1020,8 +1020,8 @@ void AudioInterruptService::ResetNonInterruptControl(AudioInterrupt audioInterru if (!IsGameAvoidCallbackCase(audioInterrupt)) { return; } - if (mutedGameSessionId_.find(streamId) != mutedGameSessionId_.end()) { - mutedGameSessionId_.erase(streamId); + if (mutedGameSessionId_.find(audioInterrupt.streamId) != mutedGameSessionId_.end()) { + mutedGameSessionId_.erase(audioInterrupt.streamId); } AUDIO_INFO_LOG("Reset non-interrupt control for %{public}u", audioInterrupt.streamId); const sptr gsp = GetAudioServerProxy(); -- Gitee