Loading api/current.txt +2 −3 Original line number Diff line number Diff line Loading @@ -27774,9 +27774,8 @@ package android.service.voice { } public static class AlwaysOnHotwordDetector.EventPayload { field public final android.media.AudioFormat audioFormat; field public final byte[] data; field public final boolean triggerAvailable; method public android.media.AudioFormat getCaptureAudioFormat(); method public byte[] getTriggerAudio(); } public class VoiceInteractionService extends android.app.Service { core/java/android/service/voice/AlwaysOnHotwordDetector.java +61 −32 Original line number Diff line number Diff line Loading @@ -187,48 +187,77 @@ public class AlwaysOnHotwordDetector { * Additional payload for {@link Callback#onDetected}. */ public static class EventPayload { /** * Indicates if {@code data} is the audio that triggered the keyphrase. private final boolean mTriggerAvailable; // Indicates if {@code captureSession} can be used to continue capturing more audio // from the DSP hardware. private final boolean mCaptureAvailable; // The session to use when attempting to capture more audio from the DSP hardware. private final int mCaptureSession; private final AudioFormat mAudioFormat; // Raw data associated with the event. // This is the audio that triggered the keyphrase if {@code isTriggerAudio} is true. private final byte[] mData; private EventPayload(boolean triggerAvailable, boolean captureAvailable, AudioFormat audioFormat, int captureSession, byte[] data) { mTriggerAvailable = triggerAvailable; mCaptureAvailable = captureAvailable; mCaptureSession = captureSession; mAudioFormat = audioFormat; mData = data; } /** * Gets the format of the audio obtained using {@link #getTriggerAudio()}. * May be null if there's no audio present. */ public final boolean triggerAvailable; @Nullable public AudioFormat getCaptureAudioFormat() { return mAudioFormat; } /** * Indicates if {@code captureSession} can be used to continue capturing more audio from * the DSP hardware. * Gets the raw audio that triggered the keyphrase. * This may be null if the trigger audio isn't available. * If non-null, the format of the audio can be obtained by calling * {@link #getCaptureAudioFormat()}. * * Candidate for public API * @hide * @see AlwaysOnHotwordDetector#RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO */ public final boolean captureAvailable; @Nullable public byte[] getTriggerAudio() { if (mTriggerAvailable) { return mData; } else { return null; } } /** * The session to use when attempting to capture more audio from the DSP hardware. * Gets the session ID to start a capture from the DSP. * This may be null if streaming capture isn't possible. * If non-null, the format of the audio that can be captured can be * obtained using {@link #getCaptureAudioFormat()}. * * TODO: Candidate for Public API when the API to start capture with a session ID * is made public. * * TODO: Add this to {@link #getCaptureAudioFormat()}: * "Gets the format of the audio obtained using {@link #getTriggerAudio()} * or {@link #getCaptureSession()}. May be null if no audio can be obtained * for either the trigger or a streaming session." * * TODO: Should this return a known invalid value instead? * * Candidate for public API * TODO: When unhiding, change javadoc of audioFormat to - * "Format of {@code data} or the audio that may be captured using {@code captureSession}. * May be null if {@code triggerAvailable} and {@code captureAvailable} are false." * @hide */ public final int captureSession; /** * Format of {@code data}. * May be null if {@code triggerAvailable} is false. */ @Nullable public final AudioFormat audioFormat; /** * Raw data associated with the event. * This is the audio that triggered the keyphrase if {@code isTriggerAudio} is true. */ @Nullable public final byte[] data; private EventPayload(boolean _triggerAvailable, boolean _captureAvailable, AudioFormat _audioFormat, int _captureSession, byte[] _data) { triggerAvailable = _triggerAvailable; captureAvailable = _captureAvailable; captureSession = _captureSession; audioFormat = _audioFormat; data = _data; public Integer getCaptureSession() { if (mCaptureAvailable) { return mCaptureSession; } else { return null; } } } Loading Loading
api/current.txt +2 −3 Original line number Diff line number Diff line Loading @@ -27774,9 +27774,8 @@ package android.service.voice { } public static class AlwaysOnHotwordDetector.EventPayload { field public final android.media.AudioFormat audioFormat; field public final byte[] data; field public final boolean triggerAvailable; method public android.media.AudioFormat getCaptureAudioFormat(); method public byte[] getTriggerAudio(); } public class VoiceInteractionService extends android.app.Service {
core/java/android/service/voice/AlwaysOnHotwordDetector.java +61 −32 Original line number Diff line number Diff line Loading @@ -187,48 +187,77 @@ public class AlwaysOnHotwordDetector { * Additional payload for {@link Callback#onDetected}. */ public static class EventPayload { /** * Indicates if {@code data} is the audio that triggered the keyphrase. private final boolean mTriggerAvailable; // Indicates if {@code captureSession} can be used to continue capturing more audio // from the DSP hardware. private final boolean mCaptureAvailable; // The session to use when attempting to capture more audio from the DSP hardware. private final int mCaptureSession; private final AudioFormat mAudioFormat; // Raw data associated with the event. // This is the audio that triggered the keyphrase if {@code isTriggerAudio} is true. private final byte[] mData; private EventPayload(boolean triggerAvailable, boolean captureAvailable, AudioFormat audioFormat, int captureSession, byte[] data) { mTriggerAvailable = triggerAvailable; mCaptureAvailable = captureAvailable; mCaptureSession = captureSession; mAudioFormat = audioFormat; mData = data; } /** * Gets the format of the audio obtained using {@link #getTriggerAudio()}. * May be null if there's no audio present. */ public final boolean triggerAvailable; @Nullable public AudioFormat getCaptureAudioFormat() { return mAudioFormat; } /** * Indicates if {@code captureSession} can be used to continue capturing more audio from * the DSP hardware. * Gets the raw audio that triggered the keyphrase. * This may be null if the trigger audio isn't available. * If non-null, the format of the audio can be obtained by calling * {@link #getCaptureAudioFormat()}. * * Candidate for public API * @hide * @see AlwaysOnHotwordDetector#RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO */ public final boolean captureAvailable; @Nullable public byte[] getTriggerAudio() { if (mTriggerAvailable) { return mData; } else { return null; } } /** * The session to use when attempting to capture more audio from the DSP hardware. * Gets the session ID to start a capture from the DSP. * This may be null if streaming capture isn't possible. * If non-null, the format of the audio that can be captured can be * obtained using {@link #getCaptureAudioFormat()}. * * TODO: Candidate for Public API when the API to start capture with a session ID * is made public. * * TODO: Add this to {@link #getCaptureAudioFormat()}: * "Gets the format of the audio obtained using {@link #getTriggerAudio()} * or {@link #getCaptureSession()}. May be null if no audio can be obtained * for either the trigger or a streaming session." * * TODO: Should this return a known invalid value instead? * * Candidate for public API * TODO: When unhiding, change javadoc of audioFormat to - * "Format of {@code data} or the audio that may be captured using {@code captureSession}. * May be null if {@code triggerAvailable} and {@code captureAvailable} are false." * @hide */ public final int captureSession; /** * Format of {@code data}. * May be null if {@code triggerAvailable} is false. */ @Nullable public final AudioFormat audioFormat; /** * Raw data associated with the event. * This is the audio that triggered the keyphrase if {@code isTriggerAudio} is true. */ @Nullable public final byte[] data; private EventPayload(boolean _triggerAvailable, boolean _captureAvailable, AudioFormat _audioFormat, int _captureSession, byte[] _data) { triggerAvailable = _triggerAvailable; captureAvailable = _captureAvailable; captureSession = _captureSession; audioFormat = _audioFormat; data = _data; public Integer getCaptureSession() { if (mCaptureAvailable) { return mCaptureSession; } else { return null; } } } Loading