From b7a5a0382a299ca083e4d81a739a1d1636d2afd9 Mon Sep 17 00:00:00 2001 From: Ytai Ben-Tsvi Date: Mon, 14 Mar 2022 15:23:24 -0700 Subject: [PATCH] Correctly initialize recognition events The default-constructed objects have null for non-nullable fields. Fixes: 224483943 Test: Manual verification of soundtrigger use-cases. Change-Id: I1dc49d87fc935d608e482ab2cd0713231ccb545f --- ...oundTriggerHalConcurrentCaptureHandler.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHalConcurrentCaptureHandler.java b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHalConcurrentCaptureHandler.java index 990b21c211a3f..1cc05391b497c 100644 --- a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHalConcurrentCaptureHandler.java +++ b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerHalConcurrentCaptureHandler.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.media.permission.SafeCloseable; import android.media.soundtrigger.ModelParameterRange; import android.media.soundtrigger.PhraseRecognitionEvent; +import android.media.soundtrigger.PhraseRecognitionExtra; import android.media.soundtrigger.PhraseSoundModel; import android.media.soundtrigger.Properties; import android.media.soundtrigger.RecognitionConfig; @@ -392,7 +393,7 @@ public class SoundTriggerHalConcurrentCaptureHandler implements ISoundTriggerHal private static void notifyAbort(int modelHandle, LoadedModel model) { switch (model.type) { case SoundModelType.GENERIC: { - RecognitionEvent event = new RecognitionEvent(); + RecognitionEvent event = newEmptyRecognitionEvent(); event.status = RecognitionStatus.ABORTED; event.type = SoundModelType.GENERIC; model.callback.recognitionCallback(modelHandle, event); @@ -400,7 +401,7 @@ public class SoundTriggerHalConcurrentCaptureHandler implements ISoundTriggerHal break; case SoundModelType.KEYPHRASE: { - PhraseRecognitionEvent event = new PhraseRecognitionEvent(); + PhraseRecognitionEvent event = newEmptyPhraseRecognitionEvent(); event.common.status = RecognitionStatus.ABORTED; event.common.type = SoundModelType.KEYPHRASE; model.callback.phraseRecognitionCallback(modelHandle, event); @@ -415,6 +416,19 @@ public class SoundTriggerHalConcurrentCaptureHandler implements ISoundTriggerHal mNotifier.unregisterListener(this); } + private static PhraseRecognitionEvent newEmptyPhraseRecognitionEvent() { + PhraseRecognitionEvent result = new PhraseRecognitionEvent(); + result.common = newEmptyRecognitionEvent(); + result.phraseExtras = new PhraseRecognitionExtra[0]; + return result; + } + + private static RecognitionEvent newEmptyRecognitionEvent() { + RecognitionEvent result = new RecognitionEvent(); + result.data = new byte[0]; + return result; + } + //////////////////////////////////////////////////////////////////////////////////////////////// // All methods below do trivial delegation - no interesting logic. @Override