From 36bdb6627a44be2e81c622c1e022ac39807692d8 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Thu, 9 Mar 2017 11:56:51 -0800 Subject: [PATCH] AudioFocusRequest.Builder build exception and focus request deprecation AudioFocusRequest.Builder.build() throws IllegalStateException when invalid parameters were set. Deprecate legacy focus request methods that used stream types. Test: cts-tradefed run cts -m CtsMediaTestCases -t android.media.cts.AudioFocusTest Bug: 30258418 Change-Id: Ie8960e686bc495fd06ac1b6f9eec3613ea19aaaa --- api/current.txt | 4 ++-- api/system-current.txt | 4 ++-- api/test-current.txt | 4 ++-- media/java/android/media/AudioFocusRequest.java | 6 +++--- media/java/android/media/AudioManager.java | 4 ++++ 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/api/current.txt b/api/current.txt index 6a62fdea18536..530addf4aec2f 100644 --- a/api/current.txt +++ b/api/current.txt @@ -20986,7 +20986,7 @@ package android.media { } public class AudioManager { - method public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener); + method public deprecated int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener); method public int abandonAudioFocusRequest(android.media.AudioFocusRequest); method public void adjustStreamVolume(int, int, int); method public void adjustSuggestedStreamVolume(int, int, int); @@ -21023,7 +21023,7 @@ package android.media { method public deprecated void registerMediaButtonEventReceiver(android.app.PendingIntent); method public deprecated void registerRemoteControlClient(android.media.RemoteControlClient); method public deprecated boolean registerRemoteController(android.media.RemoteController); - method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int); + method public deprecated int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int); method public int requestAudioFocus(android.media.AudioFocusRequest); method public deprecated void setBluetoothA2dpOn(boolean); method public void setBluetoothScoOn(boolean); diff --git a/api/system-current.txt b/api/system-current.txt index 339f40b85c2c4..7f2fbde0e9d80 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -22750,7 +22750,7 @@ package android.media { } public class AudioManager { - method public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener); + method public deprecated int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener); method public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes); method public int abandonAudioFocusRequest(android.media.AudioFocusRequest); method public void adjustStreamVolume(int, int, int); @@ -22790,7 +22790,7 @@ package android.media { method public deprecated void registerMediaButtonEventReceiver(android.app.PendingIntent); method public deprecated void registerRemoteControlClient(android.media.RemoteControlClient); method public deprecated boolean registerRemoteController(android.media.RemoteController); - method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int); + method public deprecated int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int); method public int requestAudioFocus(android.media.AudioFocusRequest); method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int) throws java.lang.IllegalArgumentException; method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy) throws java.lang.IllegalArgumentException; diff --git a/api/test-current.txt b/api/test-current.txt index fc96532ba3835..bfe8660e70082 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -21087,7 +21087,7 @@ package android.media { } public class AudioManager { - method public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener); + method public deprecated int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener); method public int abandonAudioFocusRequest(android.media.AudioFocusRequest); method public void adjustStreamVolume(int, int, int); method public void adjustSuggestedStreamVolume(int, int, int); @@ -21124,7 +21124,7 @@ package android.media { method public deprecated void registerMediaButtonEventReceiver(android.app.PendingIntent); method public deprecated void registerRemoteControlClient(android.media.RemoteControlClient); method public deprecated boolean registerRemoteController(android.media.RemoteController); - method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int); + method public deprecated int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int); method public int requestAudioFocus(android.media.AudioFocusRequest); method public deprecated void setBluetoothA2dpOn(boolean); method public void setBluetoothScoOn(boolean); diff --git a/media/java/android/media/AudioFocusRequest.java b/media/java/android/media/AudioFocusRequest.java index 1b75a7897cb4c..73f912b9e6f50 100644 --- a/media/java/android/media/AudioFocusRequest.java +++ b/media/java/android/media/AudioFocusRequest.java @@ -303,12 +303,12 @@ public final class AudioFocusRequest { * by this {@code Builder}'s configuration methods. * @return the {@code AudioFocusRequest} instance qualified by all the properties set * on this {@code Builder}. - * @throws IllegalArgumentException thrown when focus request is set to accept delayed - * focus, or to pause on duck, but no focus change listener was set. + * @throws IllegalStateException thrown when attempting to build a focus request that is set + * to accept delayed focus, or to pause on duck, but no focus change listener was set. */ public AudioFocusRequest build() { if ((mDelayedFocus || mPausesOnDuck) && (mFocusListener == null)) { - throw new IllegalArgumentException( + throw new IllegalStateException( "Can't use delayed focus or pause on duck without a listener"); } final int flags = 0 diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index dc69a69d405f5..f13ccc12692d8 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -2234,8 +2234,11 @@ public class AudioManager { * Use {@link #AUDIOFOCUS_GAIN} for a focus request of unknown duration such * as the playback of a song or a video. * @return {@link #AUDIOFOCUS_REQUEST_FAILED} or {@link #AUDIOFOCUS_REQUEST_GRANTED} + * @deprecated use {@link #requestAudioFocus(AudioFocusRequest)} */ public int requestAudioFocus(OnAudioFocusChangeListener l, int streamType, int durationHint) { + PlayerBase.deprecateStreamTypeForPlayback(streamType, + "AudioManager", "requestAudioFocus()"); int status = AUDIOFOCUS_REQUEST_FAILED; try { @@ -2502,6 +2505,7 @@ public class AudioManager { * Abandon audio focus. Causes the previous focus owner, if any, to receive focus. * @param l the listener with which focus was requested. * @return {@link #AUDIOFOCUS_REQUEST_FAILED} or {@link #AUDIOFOCUS_REQUEST_GRANTED} + * @deprecated use {@link #abandonAudioFocusRequest(AudioFocusRequest)} */ public int abandonAudioFocus(OnAudioFocusChangeListener l) { return abandonAudioFocus(l, null /*AudioAttributes, legacy behavior*/);