1a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung/*
2a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung * Copyright (C) 2015 The Android Open Source Project
3a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung *
4a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung * Licensed under the Apache License, Version 2.0 (the "License");
5a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung * you may not use this file except in compliance with the License.
6a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung * You may obtain a copy of the License at
7a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung *
8a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung *      http://www.apache.org/licenses/LICENSE-2.0
9a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung *
10a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung * Unless required by applicable law or agreed to in writing, software
11a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung * distributed under the License is distributed on an "AS IS" BASIS,
12a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung * See the License for the specific language governing permissions and
14a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung * limitations under the License.
15a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung */
16a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoungpackage android.support.car.media;
17a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung
18df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkivimport android.Manifest;
19a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoungimport android.media.AudioAttributes;
20df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkivimport android.media.AudioFormat;
219aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrupimport android.media.AudioManager;
226f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkivimport android.media.AudioManager.OnAudioFocusChangeListener;
235672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Parkimport android.support.annotation.IntDef;
24df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkivimport android.support.annotation.RequiresPermission;
25a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoungimport android.support.car.CarManagerBase;
26eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chenimport android.support.car.CarNotConnectedException;
27a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung
285672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Parkimport java.lang.annotation.Retention;
295672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Parkimport java.lang.annotation.RetentionPolicy;
305672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park
315672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park/**
3219c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * APIs for handling car-specific audio use cases. Provides a set of CAR_AUDIO_USAGE_* constants
3319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * that can be used to route audio by use case to the car. Important beyond the normal
3419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * {@link AudioManager} class methods because it handles multi channel audio. Includes use cases
3519c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * such as routing call audio only to the driver and not through all speakers.
365672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */
37e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkpublic abstract class CarAudioManager implements CarManagerBase {
38a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung
39a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung    /**
405672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     * Audio usage for unspecified type.
415672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
425672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_DEFAULT = 0;
435672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
445672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     * Audio usage for playing music.
455672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
465672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_MUSIC = 1;
475672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
4819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Audio usage for hardware radio.
499aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup     * @hide
505672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
515672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_RADIO = 2;
525672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
535672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     * Audio usage for playing navigation guidance.
545672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
555672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_NAVIGATION_GUIDANCE = 3;
565672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
5719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Audio usage for voice call.
585672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
595672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_VOICE_CALL = 4;
605672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
615672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     * Audio usage for voice search or voice command.
625672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
635672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_VOICE_COMMAND = 5;
645672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
655672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     * Audio usage for playing alarm.
66a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung     */
675672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_ALARM = 6;
685672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
695672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     * Audio usage for notification sound.
705672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
715672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_NOTIFICATION = 7;
725672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
7319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Audio usage for system sound (such as UI feedback).
745672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
755672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_SYSTEM_SOUND = 8;
765672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
7719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Audio usage for playing safety alerts.
785672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
795672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT = 9;
805672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park
815672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /** @hide */
825672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public static final int CAR_AUDIO_USAGE_MAX = CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT;
835672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park
845672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /** @hide */
855672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    @IntDef({CAR_AUDIO_USAGE_DEFAULT, CAR_AUDIO_USAGE_MUSIC, CAR_AUDIO_USAGE_RADIO,
865672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park        CAR_AUDIO_USAGE_NAVIGATION_GUIDANCE, CAR_AUDIO_USAGE_VOICE_CALL,
875672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park        CAR_AUDIO_USAGE_VOICE_COMMAND, CAR_AUDIO_USAGE_ALARM, CAR_AUDIO_USAGE_NOTIFICATION,
885672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park        CAR_AUDIO_USAGE_SYSTEM_SOUND, CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT})
895672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    @Retention(RetentionPolicy.SOURCE)
905672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    public @interface CarAudioUsage {}
91a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung
925672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park    /**
9319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Return {@link AudioAttributes} relevant for the given usage in car.
945672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park     */
95150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park    public abstract AudioAttributes getAudioAttributesForCarUsage(@CarAudioUsage int carUsage)
96150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park            throws CarNotConnectedException;
976f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv
986f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv    /**
9919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Request audio focus. Send a request to obtain audio focus.
1009aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup     *
10119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @param listener The listener to be notified of audio focus changes.
10219c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @param requestAttributes Obtained from {@link #getAudioAttributesForCarUsage(int)}.
10319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @param durationHint Use {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT} to indicate this
10419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * focus request is temporary and focus will be abandoned shortly. Examples of transient
10519c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * requests include playback of driving directions and notification sounds.
10619c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * </p>
10719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Use {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK} to indicate it's OK for the
10819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * previous focus owner to keep playing if it ducks its audio output.
10919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * </p>
11019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Use {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE} for a temporary request that
11119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * benefits from the system not playing disruptive sounds such as notifications, for use cases
11219c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * such as voice memo recording, or speech recognition.
11319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * </p>
11419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Use {@link AudioManager#AUDIOFOCUS_GAIN} for a focus request of unknown duration, such as
11519c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * the playback of a song or a video.
1169aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup     * @return {@link AudioManager#AUDIOFOCUS_REQUEST_FAILED}, or
11719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * {@link AudioManager#AUDIOFOCUS_REQUEST_GRANTED}.
1189aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup     * @throws IllegalArgumentException
1199aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup     */
1201ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup    public abstract int requestAudioFocus(OnAudioFocusChangeListener listener,
1219aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup            AudioAttributes requestAttributes,
122150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park            int durationHint) throws CarNotConnectedException, IllegalArgumentException;
1239aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup
1249aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup    /**
1259aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup     * @hide
1266f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv     */
1271ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup    public abstract int requestAudioFocus(OnAudioFocusChangeListener listener,
1289aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup            AudioAttributes requestAttributes,
1299aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup            int durationHint,
130150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park            int flags) throws CarNotConnectedException, IllegalArgumentException;
1316f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv    /**
13219c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Abandon audio focus. Causes the previous focus owner (if any) to receive focus.
13319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @param listener The listener with which focus was requested.
1346f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv     * @param aa
1356f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv     */
136150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park    public abstract void abandonAudioFocus(OnAudioFocusChangeListener listener, AudioAttributes aa);
137df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv
138df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv    /**
139df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     * Get {@link AudioFormat} for audio record.
140df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     * @return {@link AudioFormat} for audio record.
141df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     */
142150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park    public abstract AudioFormat getAudioRecordAudioFormat() throws CarNotConnectedException;
143df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv
144150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park    public abstract boolean isAudioRecordSupported() throws CarNotConnectedException;
145d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup
146df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv    /**
147df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     * Get minimum buffer size for {@link CarAudioRecord}.
148c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup     *
14919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @return Buffer size in bytes.
150df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     */
151c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup    public abstract int getAudioRecordMinBufferSize()
152d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup            throws CarNotConnectedException;
153df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv
154df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv    /**
155df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     * Get maximum buffer size for {@link CarAudioRecord}.
156c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup     *
15719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @return Buffer size in bytes.
158df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     */
159c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup    public abstract int getAudioRecordMaxBufferSize()
160d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup            throws CarNotConnectedException;
161df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv
162df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv    /**
163df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     * Create a {@link CarAudioRecord} for the current {@link CarAudioManager}. There can be
16419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * multiple instances of {@link CarAudioRecord}. Requires {@link
165c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup     * android.Manifest.permission#RECORD_AUDIO} permission.
166c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup     *
16719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @param bufferSize Should be a multiple of minimum buffer size acquired from {@link
16819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * #getAudioRecordMinBufferSize()}. Cannot exceed {@link #getAudioRecordMaxBufferSize()}.
169c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup     *
170df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     * @return {@link CarAudioRecord} instance for the given stream.
17119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @throws IllegalArgumentException if passed parameter (such as bufferSize) is wrong.
172df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     * @throws SecurityException if client does not have
17319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * {@link android.Manifest.permission#RECORD_AUDIO} permission.
174df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv     */
175df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv    @RequiresPermission(Manifest.permission.RECORD_AUDIO)
176c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup    public abstract CarAudioRecord createCarAudioRecord(int bufferSize)
177d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup            throws SecurityException, CarNotConnectedException;
178eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen
179eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen    /**
18019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Check if media audio is muted or not (includes music and radio). Any application
18119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * taking audio focus for media stream will move it out of a mute state.
182eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen     *
18319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @return Returns {@code true} if media is muted.
184eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen     */
185eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen    public abstract boolean isMediaMuted() throws CarNotConnectedException;
186eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen
187eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen    /**
18819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * Mute or unmute media stream including radio. Can involve audio focus change to stop
18919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * the the app currently holding audio focus. If requester is currently holding audio focus,
190d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup     * it gets LOSS_TRANSIENT focus loss. Requires
191d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup     * {@link android.support.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME}
1929aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup     * permission.
193eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen     *
19419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @param mute Returns {@code true} if media stream should be muted.
19519c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * @return Mute state of system after the request. A mute request can fail if a higher priority
19619c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham     * audio stream (such as a voice call) is already being played.
197eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen     * @hide
198eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen     */
199eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen    public abstract boolean setMediaMute(boolean mute) throws CarNotConnectedException;
200a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung}
201