Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Side by Side Diff: media/base/android/java/src/org/chromium/media/MediaPlayerListener.java

Issue 11348199: Free (and pause) audio resources when getting a phone call (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@input_color
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.media; 5 package org.chromium.media;
6 6
7 import android.Manifest.permission;
7 import android.content.Context; 8 import android.content.Context;
8 import android.content.pm.PackageManager; 9 import android.content.pm.PackageManager;
9 import android.Manifest.permission;
10 import android.media.MediaPlayer; 10 import android.media.MediaPlayer;
11 import android.telephony.PhoneStateListener;
12 import android.telephony.TelephonyManager;
11 13
12 import org.chromium.base.CalledByNative; 14 import org.chromium.base.CalledByNative;
13 import org.chromium.base.JNINamespace; 15 import org.chromium.base.JNINamespace;
14 16
15 // This class implements all the listener interface for android mediaplayer. 17 // This class implements all the listener interface for android mediaplayer.
16 // Callbacks will be sent to the native class for processing. 18 // Callbacks will be sent to the native class for processing.
17 @JNINamespace("media") 19 @JNINamespace("media")
18 class MediaPlayerListener implements MediaPlayer.OnPreparedListener, 20 class MediaPlayerListener extends PhoneStateListener implements MediaPlayer.OnPr eparedListener,
Yaron 2012/11/27 05:58:00 What about composing a PhoneStateListener. Then ea
Miguel Garcia 2012/11/27 17:24:06 I kind of like the idea of having a single class t
Yaron 2012/11/27 18:12:25 I was thinking an inner class (and thus not very f
19 MediaPlayer.OnCompletionListener, 21 MediaPlayer.OnCompletionListener,
20 MediaPlayer.OnBufferingUpdateListener, 22 MediaPlayer.OnBufferingUpdateListener,
21 MediaPlayer.OnSeekCompleteListener, 23 MediaPlayer.OnSeekCompleteListener,
22 MediaPlayer.OnVideoSizeChangedListener, 24 MediaPlayer.OnVideoSizeChangedListener,
23 MediaPlayer.OnErrorListener { 25 MediaPlayer.OnErrorListener {
24 // These values are mirrored as enums in media/base/android/media_player_bri dge.h. 26 // These values are mirrored as enums in media/base/android/media_player_bri dge.h.
25 // Please ensure they stay in sync. 27 // Please ensure they stay in sync.
26 private static final int MEDIA_ERROR_FORMAT = 0; 28 private static final int MEDIA_ERROR_FORMAT = 0;
27 private static final int MEDIA_ERROR_DECODE = 1; 29 private static final int MEDIA_ERROR_DECODE = 1;
28 private static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 2; 30 private static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 2;
29 private static final int MEDIA_ERROR_INVALID_CODE = 3; 31 private static final int MEDIA_ERROR_INVALID_CODE = 3;
30 32
31 // These values are copied from android media player. 33 // These values are copied from android media player.
32 public static final int MEDIA_ERROR_MALFORMED = -1007; 34 public static final int MEDIA_ERROR_MALFORMED = -1007;
33 public static final int MEDIA_ERROR_TIMED_OUT = -110; 35 public static final int MEDIA_ERROR_TIMED_OUT = -110;
34 36
35 // Used to determine the class instance to dispatch the native call to. 37 // Used to determine the class instance to dispatch the native call to.
36 private int mNativeMediaPlayerListener = 0; 38 private int mNativeMediaPlayerListener = 0;
39 private final Context mContext;
37 40
38 private MediaPlayerListener(int nativeMediaPlayerListener) { 41 private MediaPlayerListener(int nativeMediaPlayerListener, Context context) {
39 mNativeMediaPlayerListener = nativeMediaPlayerListener; 42 mNativeMediaPlayerListener = nativeMediaPlayerListener;
43 mContext = context;
40 } 44 }
41 45
42 @Override 46 @Override
43 public boolean onError(MediaPlayer mp, int what, int extra) { 47 public boolean onError(MediaPlayer mp, int what, int extra) {
44 int errorType; 48 int errorType;
45 switch (what) { 49 switch (what) {
46 case MediaPlayer.MEDIA_ERROR_UNKNOWN: 50 case MediaPlayer.MEDIA_ERROR_UNKNOWN:
47 switch (extra) { 51 switch (extra) {
48 case MEDIA_ERROR_MALFORMED: 52 case MEDIA_ERROR_MALFORMED:
49 errorType = MEDIA_ERROR_DECODE; 53 errorType = MEDIA_ERROR_DECODE;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 @Override 96 @Override
93 public void onCompletion(MediaPlayer mp) { 97 public void onCompletion(MediaPlayer mp) {
94 nativeOnPlaybackComplete(mNativeMediaPlayerListener); 98 nativeOnPlaybackComplete(mNativeMediaPlayerListener);
95 } 99 }
96 100
97 @Override 101 @Override
98 public void onPrepared(MediaPlayer mp) { 102 public void onPrepared(MediaPlayer mp) {
99 nativeOnMediaPrepared(mNativeMediaPlayerListener); 103 nativeOnMediaPrepared(mNativeMediaPlayerListener);
100 } 104 }
101 105
106 @Override
107 public void onCallStateChanged(int type, String number) {
108 if (type != TelephonyManager.CALL_STATE_IDLE) {
109 nativeOnMediaInterrupted(mNativeMediaPlayerListener);
110 }
111 }
112
102 @CalledByNative 113 @CalledByNative
103 private static void create(int nativeMediaPlayerListener, 114 public void releaseResources() {
115 // Unregister the listener
116 if (mContext != null) {
117 TelephonyManager mgr =
118 (TelephonyManager) mContext.getSystemService(Context.TELEPHO NY_SERVICE);
119 if (mgr != null) {
120 mgr.listen(this, PhoneStateListener.LISTEN_NONE);
121 }
122 }
123 }
124
125 @CalledByNative
126 private static MediaPlayerListener create(int nativeMediaPlayerListener,
104 Context context, MediaPlayer mediaPlayer) { 127 Context context, MediaPlayer mediaPlayer) {
105 MediaPlayerListener listener = new MediaPlayerListener(nativeMediaPlayer Listener); 128 MediaPlayerListener listener = new MediaPlayerListener(nativeMediaPlayer Listener, context);
106 mediaPlayer.setOnBufferingUpdateListener(listener); 129 mediaPlayer.setOnBufferingUpdateListener(listener);
107 mediaPlayer.setOnCompletionListener(listener); 130 mediaPlayer.setOnCompletionListener(listener);
108 mediaPlayer.setOnErrorListener(listener); 131 mediaPlayer.setOnErrorListener(listener);
109 mediaPlayer.setOnPreparedListener(listener); 132 mediaPlayer.setOnPreparedListener(listener);
110 mediaPlayer.setOnSeekCompleteListener(listener); 133 mediaPlayer.setOnSeekCompleteListener(listener);
111 mediaPlayer.setOnVideoSizeChangedListener(listener); 134 mediaPlayer.setOnVideoSizeChangedListener(listener);
112 if (PackageManager.PERMISSION_GRANTED == 135 if (PackageManager.PERMISSION_GRANTED ==
113 context.checkCallingPermission(permission.WAKE_LOCK)) { 136 context.checkCallingPermission(permission.WAKE_LOCK)) {
114 mediaPlayer.setWakeMode(context, android.os.PowerManager.FULL_WAKE_L OCK); 137 mediaPlayer.setWakeMode(context, android.os.PowerManager.FULL_WAKE_L OCK);
115 } 138 }
139
140 TelephonyManager mgr =
141 (TelephonyManager) context.getSystemService(Context.TELEPHONY_SE RVICE);
142 if (mgr != null) {
143 mgr.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
144 }
145 return listener;
116 } 146 }
117 147
118 /** 148 /**
119 * See media/base/android/media_player_listener.cc for all the following fun ctions. 149 * See media/base/android/media_player_listener.cc for all the following fun ctions.
120 */ 150 */
121 private native void nativeOnMediaError( 151 private native void nativeOnMediaError(
122 int nativeMediaPlayerListener, 152 int nativeMediaPlayerListener,
123 int errorType); 153 int errorType);
124 154
125 private native void nativeOnVideoSizeChanged( 155 private native void nativeOnVideoSizeChanged(
126 int nativeMediaPlayerListener, 156 int nativeMediaPlayerListener,
127 int width, int height); 157 int width, int height);
128 158
129 private native void nativeOnBufferingUpdate( 159 private native void nativeOnBufferingUpdate(
130 int nativeMediaPlayerListener, 160 int nativeMediaPlayerListener,
131 int percent); 161 int percent);
132 162
133 private native void nativeOnMediaPrepared(int nativeMediaPlayerListener); 163 private native void nativeOnMediaPrepared(int nativeMediaPlayerListener);
134 164
135 private native void nativeOnPlaybackComplete(int nativeMediaPlayerListener); 165 private native void nativeOnPlaybackComplete(int nativeMediaPlayerListener);
136 166
137 private native void nativeOnSeekComplete(int nativeMediaPlayerListener); 167 private native void nativeOnSeekComplete(int nativeMediaPlayerListener);
168
169 private native void nativeOnMediaInterrupted(int nativeMediaPlayerListener);
138 } 170 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698