From abbe7c56383504eeb6edb850f319d8a8b397ae88 Mon Sep 17 00:00:00 2001 From: Atneya Nair Date: Mon, 1 May 2023 21:57:57 -0700 Subject: [PATCH] Minor FakeSoundTriggerHal fixes - Make sure setResourceContention is acked even when it is a no-op - Make sure we don't send a null recognitionSession on stopRecognition, which is possible since the call is idempotent. Bug: 236826280 Fixes: 280379313 Test: SoundTriggerManagerTest Test: AlwaysOnHotwordDetectorTest Change-Id: Ia62e6937f1a011aee0e37faa0cff8a0fd2bcbcac --- .../soundtrigger_middleware/FakeSoundTriggerHal.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/FakeSoundTriggerHal.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/FakeSoundTriggerHal.java index 37a325e09e569..829c9ca7600af 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/FakeSoundTriggerHal.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/FakeSoundTriggerHal.java @@ -310,15 +310,16 @@ public class FakeSoundTriggerHal extends ISoundTriggerHw.Stub { IAcknowledgeEvent callback) { synchronized (FakeSoundTriggerHal.this.mLock) { // oneway, so don't throw on death - if (mIsDead || mIsResourceContended == isResourcesContended) { + if (mIsDead) { return; } + boolean oldIsResourcesContended = mIsResourceContended; mIsResourceContended = isResourcesContended; // Introducing contention is the only injection which can't be // observed by the ST client. mInjectionDispatcher.wrap((ISoundTriggerInjection unused) -> callback.eventReceived()); - if (!mIsResourceContended) { + if (!mIsResourceContended && oldIsResourcesContended) { mGlobalCallbackDispatcher.wrap((ISoundTriggerHwGlobalCallback cb) -> cb.onResourcesAvailable()); } @@ -501,8 +502,10 @@ public class FakeSoundTriggerHal extends ISoundTriggerHw.Stub { Slog.wtf(TAG, "Attempted to stop recognition with invalid handle"); } ModelSession.RecognitionSession recogSession = session.stopRecognitionForModel(); - mInjectionDispatcher.wrap((ISoundTriggerInjection cb) -> - cb.onRecognitionStopped(recogSession)); + if (recogSession != null) { + mInjectionDispatcher.wrap((ISoundTriggerInjection cb) -> + cb.onRecognitionStopped(recogSession)); + } } }