 Chromium Code Reviews
 Chromium Code Reviews Issue 11348199:
  Free (and pause) audio resources when getting a phone call  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@input_color
    
  
    Issue 11348199:
  Free (and pause) audio resources when getting a phone call  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@input_color| 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..c8a926a080121b36aa3547a88c16d7b27bf2893e 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,7 +17,7 @@ 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, | 
| +class MediaPlayerListener extends PhoneStateListener implements MediaPlayer.OnPreparedListener, | 
| MediaPlayer.OnCompletionListener, | 
| 
qinmin
2012/11/23 23:46:38
move these lines to align with the previous line
 
Miguel Garcia
2012/11/26 10:37:51
Moved them to 4 space indent, I think this is more
 | 
| MediaPlayer.OnBufferingUpdateListener, | 
| MediaPlayer.OnSeekCompleteListener, | 
| @@ -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); | 
| 
qinmin
2012/11/23 23:46:38
fix indent, 8 chars instead of 4
 
Miguel Garcia
2012/11/26 10:37:51
Done.
 | 
| + 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); | 
| 
qinmin
2012/11/23 23:46:38
fix indent
 
Miguel Garcia
2012/11/26 10:37:51
Done.
 | 
| + if (mgr != null) { | 
| + mgr.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); | 
| 
qinmin
2012/11/23 23:46:38
indent is 4
 
Miguel Garcia
2012/11/26 10:37:51
Done.
 | 
| + } | 
| + 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); | 
| } |