summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authormiguelg@chromium.org <miguelg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-06 20:10:05 +0000
committermiguelg@chromium.org <miguelg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-06 20:10:05 +0000
commit5e9829719e274cbc0e0681b6e63732f350debc90 (patch)
treeca25cee534824967b570650a588cc2182ecca199 /media
parent8dcf6a0cdd47dd3e44f94db80dfe2d75ae5714b7 (diff)
downloadchromium_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.java30
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;
}