Index: media/base/android/java/src/org/chromium/media/MediaPlayerListener.java |
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 043dfb92ea2f91f368eb1a3de432c6b5280268ae..86743e123a4053bd6c50eb8f8d8b4ed268347bfb 100644 |
--- a/media/base/android/java/src/org/chromium/media/MediaPlayerListener.java |
+++ b/media/base/android/java/src/org/chromium/media/MediaPlayerListener.java |
@@ -4,10 +4,12 @@ |
package org.chromium.media; |
+import android.Manifest.permission; |
import android.content.Context; |
import android.content.pm.PackageManager; |
-import android.Manifest.permission; |
import android.media.MediaPlayer; |
+import android.telephony.PhoneStateListener; |
+import android.telephony.TelephonyManager; |
import org.chromium.base.CalledByNative; |
import org.chromium.base.JNINamespace; |
@@ -15,12 +17,12 @@ import org.chromium.base.JNINamespace; |
// This class implements all the listener interface for android mediaplayer. |
// Callbacks will be sent to the native class for processing. |
@JNINamespace("media") |
-class MediaPlayerListener implements MediaPlayer.OnPreparedListener, |
- MediaPlayer.OnCompletionListener, |
- MediaPlayer.OnBufferingUpdateListener, |
- MediaPlayer.OnSeekCompleteListener, |
- MediaPlayer.OnVideoSizeChangedListener, |
- MediaPlayer.OnErrorListener { |
+class MediaPlayerListener extends PhoneStateListener implements MediaPlayer.OnPreparedListener, |
+ MediaPlayer.OnCompletionListener, |
+ MediaPlayer.OnBufferingUpdateListener, |
+ MediaPlayer.OnSeekCompleteListener, |
+ MediaPlayer.OnVideoSizeChangedListener, |
+ MediaPlayer.OnErrorListener { |
// 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; |
@@ -34,9 +36,11 @@ class MediaPlayerListener implements MediaPlayer.OnPreparedListener, |
// Used to determine the class instance to dispatch the native call to. |
private int mNativeMediaPlayerListener = 0; |
+ private final Context mContext; |
- private MediaPlayerListener(int nativeMediaPlayerListener) { |
+ private MediaPlayerListener(int nativeMediaPlayerListener, Context context) { |
mNativeMediaPlayerListener = nativeMediaPlayerListener; |
+ mContext = context; |
} |
@Override |
@@ -99,10 +103,29 @@ class MediaPlayerListener implements MediaPlayer.OnPreparedListener, |
nativeOnMediaPrepared(mNativeMediaPlayerListener); |
} |
+ @Override |
+ public void onCallStateChanged(int type, String number) { |
+ if (type != TelephonyManager.CALL_STATE_IDLE) { |
+ nativeOnMediaInterrupted(mNativeMediaPlayerListener); |
+ } |
+ } |
+ |
@CalledByNative |
- private static void create(int nativeMediaPlayerListener, |
+ public void releaseResources() { |
+ // Unregister the listener |
+ if (mContext != null) { |
+ TelephonyManager mgr = |
+ (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); |
+ if (mgr != null) { |
+ mgr.listen(this, PhoneStateListener.LISTEN_NONE); |
+ } |
+ } |
+ } |
+ |
+ @CalledByNative |
+ private static MediaPlayerListener create(int nativeMediaPlayerListener, |
Context context, MediaPlayer mediaPlayer) { |
- MediaPlayerListener listener = new MediaPlayerListener(nativeMediaPlayerListener); |
+ MediaPlayerListener listener = new MediaPlayerListener(nativeMediaPlayerListener, context); |
mediaPlayer.setOnBufferingUpdateListener(listener); |
mediaPlayer.setOnCompletionListener(listener); |
mediaPlayer.setOnErrorListener(listener); |
@@ -113,6 +136,13 @@ class MediaPlayerListener implements MediaPlayer.OnPreparedListener, |
context.checkCallingPermission(permission.WAKE_LOCK)) { |
mediaPlayer.setWakeMode(context, android.os.PowerManager.FULL_WAKE_LOCK); |
} |
+ |
+ TelephonyManager mgr = |
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); |
+ if (mgr != null) { |
+ mgr.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); |
+ } |
+ return listener; |
} |
/** |
@@ -135,4 +165,6 @@ class MediaPlayerListener implements MediaPlayer.OnPreparedListener, |
private native void nativeOnPlaybackComplete(int nativeMediaPlayerListener); |
private native void nativeOnSeekComplete(int nativeMediaPlayerListener); |
+ |
+ private native void nativeOnMediaInterrupted(int nativeMediaPlayerListener); |
} |