Loading core/api/test-current.txt +1 −2 Original line number Diff line number Diff line Loading @@ -1892,8 +1892,7 @@ package android.hardware.soundtrigger { } @FlaggedApi("android.media.soundtrigger.manager_api") public static final class SoundTrigger.RecognitionConfig implements android.os.Parcelable { ctor @Deprecated public SoundTrigger.RecognitionConfig(boolean, boolean, @Nullable android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra[], @Nullable byte[], int); ctor public SoundTrigger.RecognitionConfig(boolean, boolean, @Nullable android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra[], @Nullable byte[]); ctor @Deprecated public SoundTrigger.RecognitionConfig(boolean, boolean, @Nullable android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra[], @Nullable byte[]); } public static class SoundTrigger.RecognitionEvent { Loading core/java/android/hardware/soundtrigger/ConversionUtil.java +11 −9 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.os.SharedMemory; import android.system.ErrnoException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; import java.util.UUID; Loading Loading @@ -170,17 +171,18 @@ public class ConversionUtil { public static SoundTrigger.RecognitionConfig aidl2apiRecognitionConfig( RecognitionConfig aidlConfig) { var keyphrases = new SoundTrigger.KeyphraseRecognitionExtra[aidlConfig.phraseRecognitionExtras.length]; int i = 0; var keyphrases = new ArrayList<SoundTrigger.KeyphraseRecognitionExtra>( aidlConfig.phraseRecognitionExtras.length); for (var extras : aidlConfig.phraseRecognitionExtras) { keyphrases[i++] = aidl2apiPhraseRecognitionExtra(extras); } return new SoundTrigger.RecognitionConfig(aidlConfig.captureRequested, false /** allowMultipleTriggers **/, keyphrases, Arrays.copyOf(aidlConfig.data, aidlConfig.data.length), aidl2apiAudioCapabilities(aidlConfig.audioCapabilities)); keyphrases.add(aidl2apiPhraseRecognitionExtra(extras)); } return new SoundTrigger.RecognitionConfig.Builder() .setCaptureRequested(aidlConfig.captureRequested) .setAllowMultipleTriggers(false) .setKeyphrases(keyphrases) .setData(Arrays.copyOf(aidlConfig.data, aidlConfig.data.length)) .setAudioCapabilities(aidl2apiAudioCapabilities(aidlConfig.audioCapabilities)) .build(); } public static PhraseRecognitionExtra api2aidlPhraseRecognitionExtra( Loading core/java/android/hardware/soundtrigger/SoundTrigger.java +16 −17 Original line number Diff line number Diff line Loading @@ -1529,8 +1529,6 @@ public class SoundTrigger { * config that can be used by * {@link SoundTriggerModule#startRecognition(int, RecognitionConfig)} * * @deprecated should use builder-based constructor instead. * TODO(b/368042125): remove this method. * @param captureRequested Whether the DSP should capture the trigger sound. * @param allowMultipleTriggers Whether the service should restart listening after the DSP * triggers. Loading @@ -1538,15 +1536,10 @@ public class SoundTrigger { * @param data Opaque data for use by system applications who know about voice engine * internals, typically during enrollment. * @param audioCapabilities Bit field encoding of the AudioCapabilities. * * @hide */ @Deprecated @SuppressWarnings("Todo") @TestApi public RecognitionConfig(boolean captureRequested, boolean allowMultipleTriggers, @SuppressLint("ArrayReturn") @Nullable KeyphraseRecognitionExtra[] keyphrases, @Nullable byte[] data, int audioCapabilities) { private RecognitionConfig(boolean captureRequested, boolean allowMultipleTriggers, @Nullable KeyphraseRecognitionExtra[] keyphrases, @Nullable byte[] data, int audioCapabilities) { this.mCaptureRequested = captureRequested; this.mAllowMultipleTriggers = allowMultipleTriggers; this.mKeyphrases = keyphrases != null ? keyphrases : new KeyphraseRecognitionExtra[0]; Loading @@ -1558,6 +1551,7 @@ public class SoundTrigger { * Constructor for {@link RecognitionConfig} without audioCapabilities. The * audioCapabilities is set to 0. * * @deprecated Use {@link Builder} instead. * @param captureRequested Whether the DSP should capture the trigger sound. * @param allowMultipleTriggers Whether the service should restart listening after the DSP * triggers. Loading @@ -1567,10 +1561,10 @@ public class SoundTrigger { * @hide */ @UnsupportedAppUsage @Deprecated @TestApi public RecognitionConfig(boolean captureRequested, boolean allowMultipleTriggers, @SuppressLint("ArrayReturn") @Nullable KeyphraseRecognitionExtra[] keyphrases, @Nullable byte[] data) { @Nullable KeyphraseRecognitionExtra[] keyphrases, @Nullable byte[] data) { this(captureRequested, allowMultipleTriggers, keyphrases, data, 0); } Loading Loading @@ -1718,7 +1712,7 @@ public class SoundTrigger { /** * Sets capture requested state. * @param captureRequested The new requested state. * @param captureRequested Whether the DSP should capture the trigger sound. * @return the same Builder instance. */ public @NonNull Builder setCaptureRequested(boolean captureRequested) { Loading @@ -1728,7 +1722,8 @@ public class SoundTrigger { /** * Sets allow multiple triggers state. * @param allowMultipleTriggers The new allow multiple triggers state. * @param allowMultipleTriggers Whether the service should restart listening after the * DSP triggers. * @return the same Builder instance. */ public @NonNull Builder setAllowMultipleTriggers(boolean allowMultipleTriggers) { Loading @@ -1738,7 +1733,8 @@ public class SoundTrigger { /** * Sets the keyphrases field. * @param keyphrases The new keyphrases. * @param keyphrases The list of keyphrase specific data associated with this * recognition session. * @return the same Builder instance. */ public @NonNull Builder setKeyphrases( Loading @@ -1749,7 +1745,9 @@ public class SoundTrigger { /** * Sets the data field. * @param data The new data. * @param data Opaque data provided to the DSP associated with this recognition session, * which is used by system applications who know about voice engine * internals, typically during enrollment. * @return the same Builder instance. */ public @NonNull Builder setData(@Nullable byte[] data) { Loading @@ -1759,7 +1757,8 @@ public class SoundTrigger { /** * Sets the audio capabilities field. * @param audioCapabilities The new audio capabilities. * @param audioCapabilities The bit field encoding of the audio capabilities associated * with this recognition session. * @return the same Builder instance. */ public @NonNull Builder setAudioCapabilities(int audioCapabilities) { Loading core/java/android/service/voice/AlwaysOnHotwordDetector.java +16 −7 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.internal.infra.AndroidFuture; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; Loading Loading @@ -1513,10 +1514,11 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { "Recognition for the given keyphrase is not supported"); } KeyphraseRecognitionExtra[] recognitionExtra = new KeyphraseRecognitionExtra[1]; List<KeyphraseRecognitionExtra> recognitionExtra = new ArrayList<KeyphraseRecognitionExtra>(1); // TODO: Do we need to do something about the confidence level here? recognitionExtra[0] = new KeyphraseRecognitionExtra(mKeyphraseMetadata.getId(), mKeyphraseMetadata.getRecognitionModeFlags(), 0, new ConfidenceLevel[0]); recognitionExtra.add(new KeyphraseRecognitionExtra(mKeyphraseMetadata.getId(), mKeyphraseMetadata.getRecognitionModeFlags(), 0, new ConfidenceLevel[0])); boolean captureTriggerAudio = (recognitionFlags&RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO) != 0; boolean allowMultipleTriggers = Loading @@ -1534,9 +1536,16 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { int code; try { code = mSoundTriggerSession.startRecognition( mKeyphraseMetadata.getId(), mLocale.toLanguageTag(), mInternalCallback, new RecognitionConfig(captureTriggerAudio, allowMultipleTriggers, recognitionExtra, data, audioCapabilities), mKeyphraseMetadata.getId(), mLocale.toLanguageTag(), mInternalCallback, new RecognitionConfig.Builder() .setCaptureRequested(captureTriggerAudio) .setAllowMultipleTriggers(allowMultipleTriggers) .setKeyphrases(recognitionExtra) .setData(data) .setAudioCapabilities(audioCapabilities) .build(), runInBatterySaver); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); Loading media/java/android/media/soundtrigger/SoundTriggerDetector.java +9 −4 Original line number Diff line number Diff line Loading @@ -323,9 +323,14 @@ public final class SoundTriggerDetector { int status; try { status = mSoundTriggerSession.startRecognition(mSoundModel, mRecognitionCallback, new RecognitionConfig(captureTriggerAudio, allowMultipleTriggers, null, null, audioCapabilities), status = mSoundTriggerSession.startRecognition( mSoundModel, mRecognitionCallback, new RecognitionConfig.Builder() .setCaptureRequested(captureTriggerAudio) .setAllowMultipleTriggers(allowMultipleTriggers) .setAudioCapabilities(audioCapabilities) .build(), runInBatterySaver); } catch (RemoteException e) { return false; Loading Loading
core/api/test-current.txt +1 −2 Original line number Diff line number Diff line Loading @@ -1892,8 +1892,7 @@ package android.hardware.soundtrigger { } @FlaggedApi("android.media.soundtrigger.manager_api") public static final class SoundTrigger.RecognitionConfig implements android.os.Parcelable { ctor @Deprecated public SoundTrigger.RecognitionConfig(boolean, boolean, @Nullable android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra[], @Nullable byte[], int); ctor public SoundTrigger.RecognitionConfig(boolean, boolean, @Nullable android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra[], @Nullable byte[]); ctor @Deprecated public SoundTrigger.RecognitionConfig(boolean, boolean, @Nullable android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra[], @Nullable byte[]); } public static class SoundTrigger.RecognitionEvent { Loading
core/java/android/hardware/soundtrigger/ConversionUtil.java +11 −9 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.os.SharedMemory; import android.system.ErrnoException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; import java.util.UUID; Loading Loading @@ -170,17 +171,18 @@ public class ConversionUtil { public static SoundTrigger.RecognitionConfig aidl2apiRecognitionConfig( RecognitionConfig aidlConfig) { var keyphrases = new SoundTrigger.KeyphraseRecognitionExtra[aidlConfig.phraseRecognitionExtras.length]; int i = 0; var keyphrases = new ArrayList<SoundTrigger.KeyphraseRecognitionExtra>( aidlConfig.phraseRecognitionExtras.length); for (var extras : aidlConfig.phraseRecognitionExtras) { keyphrases[i++] = aidl2apiPhraseRecognitionExtra(extras); } return new SoundTrigger.RecognitionConfig(aidlConfig.captureRequested, false /** allowMultipleTriggers **/, keyphrases, Arrays.copyOf(aidlConfig.data, aidlConfig.data.length), aidl2apiAudioCapabilities(aidlConfig.audioCapabilities)); keyphrases.add(aidl2apiPhraseRecognitionExtra(extras)); } return new SoundTrigger.RecognitionConfig.Builder() .setCaptureRequested(aidlConfig.captureRequested) .setAllowMultipleTriggers(false) .setKeyphrases(keyphrases) .setData(Arrays.copyOf(aidlConfig.data, aidlConfig.data.length)) .setAudioCapabilities(aidl2apiAudioCapabilities(aidlConfig.audioCapabilities)) .build(); } public static PhraseRecognitionExtra api2aidlPhraseRecognitionExtra( Loading
core/java/android/hardware/soundtrigger/SoundTrigger.java +16 −17 Original line number Diff line number Diff line Loading @@ -1529,8 +1529,6 @@ public class SoundTrigger { * config that can be used by * {@link SoundTriggerModule#startRecognition(int, RecognitionConfig)} * * @deprecated should use builder-based constructor instead. * TODO(b/368042125): remove this method. * @param captureRequested Whether the DSP should capture the trigger sound. * @param allowMultipleTriggers Whether the service should restart listening after the DSP * triggers. Loading @@ -1538,15 +1536,10 @@ public class SoundTrigger { * @param data Opaque data for use by system applications who know about voice engine * internals, typically during enrollment. * @param audioCapabilities Bit field encoding of the AudioCapabilities. * * @hide */ @Deprecated @SuppressWarnings("Todo") @TestApi public RecognitionConfig(boolean captureRequested, boolean allowMultipleTriggers, @SuppressLint("ArrayReturn") @Nullable KeyphraseRecognitionExtra[] keyphrases, @Nullable byte[] data, int audioCapabilities) { private RecognitionConfig(boolean captureRequested, boolean allowMultipleTriggers, @Nullable KeyphraseRecognitionExtra[] keyphrases, @Nullable byte[] data, int audioCapabilities) { this.mCaptureRequested = captureRequested; this.mAllowMultipleTriggers = allowMultipleTriggers; this.mKeyphrases = keyphrases != null ? keyphrases : new KeyphraseRecognitionExtra[0]; Loading @@ -1558,6 +1551,7 @@ public class SoundTrigger { * Constructor for {@link RecognitionConfig} without audioCapabilities. The * audioCapabilities is set to 0. * * @deprecated Use {@link Builder} instead. * @param captureRequested Whether the DSP should capture the trigger sound. * @param allowMultipleTriggers Whether the service should restart listening after the DSP * triggers. Loading @@ -1567,10 +1561,10 @@ public class SoundTrigger { * @hide */ @UnsupportedAppUsage @Deprecated @TestApi public RecognitionConfig(boolean captureRequested, boolean allowMultipleTriggers, @SuppressLint("ArrayReturn") @Nullable KeyphraseRecognitionExtra[] keyphrases, @Nullable byte[] data) { @Nullable KeyphraseRecognitionExtra[] keyphrases, @Nullable byte[] data) { this(captureRequested, allowMultipleTriggers, keyphrases, data, 0); } Loading Loading @@ -1718,7 +1712,7 @@ public class SoundTrigger { /** * Sets capture requested state. * @param captureRequested The new requested state. * @param captureRequested Whether the DSP should capture the trigger sound. * @return the same Builder instance. */ public @NonNull Builder setCaptureRequested(boolean captureRequested) { Loading @@ -1728,7 +1722,8 @@ public class SoundTrigger { /** * Sets allow multiple triggers state. * @param allowMultipleTriggers The new allow multiple triggers state. * @param allowMultipleTriggers Whether the service should restart listening after the * DSP triggers. * @return the same Builder instance. */ public @NonNull Builder setAllowMultipleTriggers(boolean allowMultipleTriggers) { Loading @@ -1738,7 +1733,8 @@ public class SoundTrigger { /** * Sets the keyphrases field. * @param keyphrases The new keyphrases. * @param keyphrases The list of keyphrase specific data associated with this * recognition session. * @return the same Builder instance. */ public @NonNull Builder setKeyphrases( Loading @@ -1749,7 +1745,9 @@ public class SoundTrigger { /** * Sets the data field. * @param data The new data. * @param data Opaque data provided to the DSP associated with this recognition session, * which is used by system applications who know about voice engine * internals, typically during enrollment. * @return the same Builder instance. */ public @NonNull Builder setData(@Nullable byte[] data) { Loading @@ -1759,7 +1757,8 @@ public class SoundTrigger { /** * Sets the audio capabilities field. * @param audioCapabilities The new audio capabilities. * @param audioCapabilities The bit field encoding of the audio capabilities associated * with this recognition session. * @return the same Builder instance. */ public @NonNull Builder setAudioCapabilities(int audioCapabilities) { Loading
core/java/android/service/voice/AlwaysOnHotwordDetector.java +16 −7 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.internal.infra.AndroidFuture; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; Loading Loading @@ -1513,10 +1514,11 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { "Recognition for the given keyphrase is not supported"); } KeyphraseRecognitionExtra[] recognitionExtra = new KeyphraseRecognitionExtra[1]; List<KeyphraseRecognitionExtra> recognitionExtra = new ArrayList<KeyphraseRecognitionExtra>(1); // TODO: Do we need to do something about the confidence level here? recognitionExtra[0] = new KeyphraseRecognitionExtra(mKeyphraseMetadata.getId(), mKeyphraseMetadata.getRecognitionModeFlags(), 0, new ConfidenceLevel[0]); recognitionExtra.add(new KeyphraseRecognitionExtra(mKeyphraseMetadata.getId(), mKeyphraseMetadata.getRecognitionModeFlags(), 0, new ConfidenceLevel[0])); boolean captureTriggerAudio = (recognitionFlags&RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO) != 0; boolean allowMultipleTriggers = Loading @@ -1534,9 +1536,16 @@ public class AlwaysOnHotwordDetector extends AbstractDetector { int code; try { code = mSoundTriggerSession.startRecognition( mKeyphraseMetadata.getId(), mLocale.toLanguageTag(), mInternalCallback, new RecognitionConfig(captureTriggerAudio, allowMultipleTriggers, recognitionExtra, data, audioCapabilities), mKeyphraseMetadata.getId(), mLocale.toLanguageTag(), mInternalCallback, new RecognitionConfig.Builder() .setCaptureRequested(captureTriggerAudio) .setAllowMultipleTriggers(allowMultipleTriggers) .setKeyphrases(recognitionExtra) .setData(data) .setAudioCapabilities(audioCapabilities) .build(), runInBatterySaver); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); Loading
media/java/android/media/soundtrigger/SoundTriggerDetector.java +9 −4 Original line number Diff line number Diff line Loading @@ -323,9 +323,14 @@ public final class SoundTriggerDetector { int status; try { status = mSoundTriggerSession.startRecognition(mSoundModel, mRecognitionCallback, new RecognitionConfig(captureTriggerAudio, allowMultipleTriggers, null, null, audioCapabilities), status = mSoundTriggerSession.startRecognition( mSoundModel, mRecognitionCallback, new RecognitionConfig.Builder() .setCaptureRequested(captureTriggerAudio) .setAllowMultipleTriggers(allowMultipleTriggers) .setAudioCapabilities(audioCapabilities) .build(), runInBatterySaver); } catch (RemoteException e) { return false; Loading