Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 544333ee authored by Sandeep Siddhartha's avatar Sandeep Siddhartha Committed by Android Git Automerger
Browse files

am 361c8fbd: Merge "Remove direct field access from event payload" into lmp-dev

* commit '361c8fbdcd235febf97556c9b5dcc799dfe4fbb6':
  Remove direct field access from event payload
parents e1f73194 97887cf2
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -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 {
+61 −32
Original line number Diff line number Diff line
@@ -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;
            }
        }
    }