CarAudioManager.java revision 19c8ab20a71c725316241f4b0c8f44ce18c39d39
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; 27c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrupimport android.support.car.CarNotSupportedException; 28a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung 295672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Parkimport java.lang.annotation.Retention; 305672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Parkimport java.lang.annotation.RetentionPolicy; 315672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park 325672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park/** 3319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * APIs for handling car-specific audio use cases. Provides a set of CAR_AUDIO_USAGE_* constants 3419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * that can be used to route audio by use case to the car. Important beyond the normal 3519c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * {@link AudioManager} class methods because it handles multi channel audio. Includes use cases 3619c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * such as routing call audio only to the driver and not through all speakers. 375672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 38e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkpublic abstract class CarAudioManager implements CarManagerBase { 39a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung 40a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung /** 415672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park * Audio usage for unspecified type. 425672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 435672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_DEFAULT = 0; 445672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 455672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park * Audio usage for playing music. 465672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 475672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_MUSIC = 1; 485672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 4919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Audio usage for hardware radio. 509aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 515672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 525672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_RADIO = 2; 535672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 545672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park * Audio usage for playing navigation guidance. 555672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 565672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_NAVIGATION_GUIDANCE = 3; 575672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 5819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Audio usage for voice call. 595672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 605672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_VOICE_CALL = 4; 615672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 625672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park * Audio usage for voice search or voice command. 635672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 645672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_VOICE_COMMAND = 5; 655672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 665672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park * Audio usage for playing alarm. 67a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung */ 685672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_ALARM = 6; 695672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 705672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park * Audio usage for notification sound. 715672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 725672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_NOTIFICATION = 7; 735672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 7419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Audio usage for system sound (such as UI feedback). 755672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 765672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_SYSTEM_SOUND = 8; 775672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 7819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Audio usage for playing safety alerts. 795672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 805672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT = 9; 815672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park 825672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** @hide */ 835672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public static final int CAR_AUDIO_USAGE_MAX = CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT; 845672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park 855672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** @hide */ 865672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park @IntDef({CAR_AUDIO_USAGE_DEFAULT, CAR_AUDIO_USAGE_MUSIC, CAR_AUDIO_USAGE_RADIO, 875672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park CAR_AUDIO_USAGE_NAVIGATION_GUIDANCE, CAR_AUDIO_USAGE_VOICE_CALL, 885672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park CAR_AUDIO_USAGE_VOICE_COMMAND, CAR_AUDIO_USAGE_ALARM, CAR_AUDIO_USAGE_NOTIFICATION, 895672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park CAR_AUDIO_USAGE_SYSTEM_SOUND, CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT}) 905672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park @Retention(RetentionPolicy.SOURCE) 915672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park public @interface CarAudioUsage {} 92a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung 935672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park /** 9419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Return {@link AudioAttributes} relevant for the given usage in car. 955672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park */ 96e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park public abstract AudioAttributes getAudioAttributesForCarUsage(@CarAudioUsage int carUsage); 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, 1229aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup int durationHint) throws IllegalArgumentException; 1239aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup 1249aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup /** 1259aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * See 1269aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * {@link AudioManager#requestAudioFocus(OnAudioFocusChangeListener, AudioAttributes, int, int)} 1279aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 1286f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv */ 1291ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup public abstract int requestAudioFocus(OnAudioFocusChangeListener listener, 1309aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup AudioAttributes requestAttributes, 1319aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup int durationHint, 1329aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup int flags) throws IllegalArgumentException; 1336f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv /** 13419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Abandon audio focus. Causes the previous focus owner (if any) to receive focus. 13519c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @param listener The listener with which focus was requested. 1366f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv * @param aa 1379aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @return 1389aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * {@link AudioManager#AUDIOFOCUS_REQUEST_FAILED} or 1399aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * {@link AudioManager#AUDIOFOCUS_REQUEST_GRANTED} 1406f3f402a7469e300fbfe65d950204fef995d4d8dVitalii Tomkiv */ 1411ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup public abstract int abandonAudioFocus(OnAudioFocusChangeListener listener, AudioAttributes aa); 142df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 143df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv /** 144df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * Get {@link AudioFormat} for audio record. 145df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * @return {@link AudioFormat} for audio record. 146df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv */ 147df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv public abstract AudioFormat getAudioRecordAudioFormat(); 148df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 149df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv /** 150df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * Get minimum buffer size for {@link CarAudioRecord}. 151c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup * 15219c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @return Buffer size in bytes. 153df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv */ 154c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup public abstract int getAudioRecordMinBufferSize() 155c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup throws CarNotConnectedException, CarNotSupportedException; 156df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 157df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv /** 158df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * Get maximum buffer size for {@link CarAudioRecord}. 159c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup * 16019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @return Buffer size in bytes. 161df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv */ 162c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup public abstract int getAudioRecordMaxBufferSize() 163c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup throws CarNotConnectedException, CarNotSupportedException; 164df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 165df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv /** 166df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * Create a {@link CarAudioRecord} for the current {@link CarAudioManager}. There can be 16719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * multiple instances of {@link CarAudioRecord}. Requires {@link 168c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup * android.Manifest.permission#RECORD_AUDIO} permission. 169c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup * 17019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @param bufferSize Should be a multiple of minimum buffer size acquired from {@link 17119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * #getAudioRecordMinBufferSize()}. Cannot exceed {@link #getAudioRecordMaxBufferSize()}. 172c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup * 173df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * @return {@link CarAudioRecord} instance for the given stream. 17419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @throws IllegalArgumentException if passed parameter (such as bufferSize) is wrong. 175df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * @throws SecurityException if client does not have 17619c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * {@link android.Manifest.permission#RECORD_AUDIO} permission. 177df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv */ 178df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv @RequiresPermission(Manifest.permission.RECORD_AUDIO) 179c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup public abstract CarAudioRecord createCarAudioRecord(int bufferSize) 180c5dc1964a09d266243ba418e96f1937b199ec93eJason Tholstrup throws SecurityException, CarNotConnectedException, CarNotSupportedException; 181eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen 182eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen /** 18319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Check if media audio is muted or not (includes music and radio). Any application 18419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * taking audio focus for media stream will move it out of a mute state. 185eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen * 18619c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @return Returns {@code true} if media is muted. 187eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen */ 188eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen public abstract boolean isMediaMuted() throws CarNotConnectedException; 189eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen 190eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen /** 19119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Mute or unmute media stream including radio. Can involve audio focus change to stop 19219c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * the the app currently holding audio focus. If requester is currently holding audio focus, 19319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * it gets LOSS_TRANSIENT focus loss. Requires {@link PERMISSION_CAR_CONTROL_AUDIO_VOLUME} 1949aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * permission. 195eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen * 19619c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @param mute Returns {@code true} if media stream should be muted. 19719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @return Mute state of system after the request. A mute request can fail if a higher priority 19819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * audio stream (such as a voice call) is already being played. 199eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen * @hide 200eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen */ 201eaad6efb79308bed2fca49e6dd19f7608071ee27Anthony Chen public abstract boolean setMediaMute(boolean mute) throws CarNotConnectedException; 202a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung} 203