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

Commit 97887cf2 authored by Sandeep Siddhartha's avatar Sandeep Siddhartha Committed by Android (Google) Code Review
Browse files

Merge "Remove direct field access from event payload" into lmp-dev

parents a3a5af04 d5730bc8
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;
            }
        }
    }