diff options
author | miguelg@chromium.org <miguelg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-06 20:10:05 +0000 |
---|---|---|
committer | miguelg@chromium.org <miguelg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-06 20:10:05 +0000 |
commit | 5e9829719e274cbc0e0681b6e63732f350debc90 (patch) | |
tree | ca25cee534824967b570650a588cc2182ecca199 /media | |
parent | 8dcf6a0cdd47dd3e44f94db80dfe2d75ae5714b7 (diff) | |
download | chromium_src-5e9829719e274cbc0e0681b6e63732f350debc90.zip chromium_src-5e9829719e274cbc0e0681b6e63732f350debc90.tar.gz chromium_src-5e9829719e274cbc0e0681b6e63732f350debc90.tar.bz2 |
Request audio focus upon music play and pause when losing it fully.
For now do not pause on transient audio loses as it's not clear when to resume and when not to.
BUG=163914,147257
Review URL: https://chromiumcodereview.appspot.com/11412325
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171567 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/base/android/java/src/org/chromium/media/MediaPlayerListener.java | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/media/base/android/java/src/org/chromium/media/MediaPlayerListener.java b/media/base/android/java/src/org/chromium/media/MediaPlayerListener.java index 86743e1..0e614c1 100644 --- a/media/base/android/java/src/org/chromium/media/MediaPlayerListener.java +++ b/media/base/android/java/src/org/chromium/media/MediaPlayerListener.java @@ -7,6 +7,7 @@ package org.chromium.media; import android.Manifest.permission; import android.content.Context; import android.content.pm.PackageManager; +import android.media.AudioManager; import android.media.MediaPlayer; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; @@ -22,7 +23,8 @@ class MediaPlayerListener extends PhoneStateListener implements MediaPlayer.OnPr MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnSeekCompleteListener, MediaPlayer.OnVideoSizeChangedListener, - MediaPlayer.OnErrorListener { + MediaPlayer.OnErrorListener, + AudioManager.OnAudioFocusChangeListener { // These values are mirrored as enums in media/base/android/media_player_bridge.h. // Please ensure they stay in sync. private static final int MEDIA_ERROR_FORMAT = 0; @@ -110,22 +112,36 @@ class MediaPlayerListener extends PhoneStateListener implements MediaPlayer.OnPr } } + @Override + public void onAudioFocusChange(int focusChange) { + if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { + nativeOnMediaInterrupted(mNativeMediaPlayerListener); + } + } + @CalledByNative public void releaseResources() { - // Unregister the listener if (mContext != null) { + // Unregister the listener. TelephonyManager mgr = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); if (mgr != null) { mgr.listen(this, PhoneStateListener.LISTEN_NONE); } + + // Unregister the wish for audio focus. + AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); + if (am != null) { + am.abandonAudioFocus(this); + } } } @CalledByNative private static MediaPlayerListener create(int nativeMediaPlayerListener, Context context, MediaPlayer mediaPlayer) { - MediaPlayerListener listener = new MediaPlayerListener(nativeMediaPlayerListener, context); + final MediaPlayerListener listener = + new MediaPlayerListener(nativeMediaPlayerListener, context); mediaPlayer.setOnBufferingUpdateListener(listener); mediaPlayer.setOnCompletionListener(listener); mediaPlayer.setOnErrorListener(listener); @@ -142,6 +158,14 @@ class MediaPlayerListener extends PhoneStateListener implements MediaPlayer.OnPr if (mgr != null) { mgr.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); } + + AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + am.requestAudioFocus( + listener, + AudioManager.STREAM_MUSIC, + + // Request permanent focus. + AudioManager.AUDIOFOCUS_GAIN); return listener; } |