| 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);
|
| }
|
|
|