Index: media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java |
=================================================================== |
--- media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java (revision 189519) |
+++ media/base/android/java/src/org/chromium/media/AudioManagerAndroid.java (working copy) |
@@ -4,14 +4,26 @@ |
package org.chromium.media; |
+import android.content.BroadcastReceiver; |
import android.content.Context; |
+import android.content.Intent; |
+import android.content.IntentFilter; |
import android.media.AudioManager; |
+import android.telephony.TelephonyManager; |
+import android.util.Log; |
import org.chromium.base.CalledByNative; |
import org.chromium.base.JNINamespace; |
@JNINamespace("media") |
class AudioManagerAndroid { |
+ private static final String TAG = "AMAndroid"; |
Yaron
2013/03/21 16:51:31
TAG = AudioManagerAndroid.class.getSimpleName()
leozwang1
2013/03/21 18:51:35
Done.
|
+ |
+ private BroadcastReceiver mReceiver = null; |
+ private Context mContext = null; |
+ |
+ private boolean mIsSpeakerOn; |
+ |
@CalledByNative |
public static void setMode(Context context, int mode) { |
AudioManager audioManager = |
@@ -20,4 +32,79 @@ |
audioManager.setMode(mode); |
} |
} |
+ |
+ @CalledByNative |
+ public static AudioManagerAndroid createAudioManagerAndroid(Context context) { |
Yaron
2013/03/21 16:51:31
This can be private too. Access modifiers are chec
leozwang1
2013/03/21 18:51:35
Done.
|
+ return new AudioManagerAndroid(context); |
+ } |
+ |
+ public AudioManagerAndroid(Context context) { |
nilesh
2013/03/21 16:42:33
You can make the constructor private.
leozwang1
2013/03/21 18:51:35
Done.
|
+ mContext = context; |
+ } |
+ |
+ @CalledByNative |
+ public void registerHeadsetReceiver(Context context) { |
+ AudioManager audioManager = |
+ (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); |
+ if (null == audioManager) { |
+ Log.d(TAG, "AudioManager is null"); |
nilesh
2013/03/21 16:42:33
Please remove these debug and verbose logs. Too ma
leozwang1
2013/03/21 18:51:35
thanks, I removed most of log, but still keep one
|
+ return; |
+ } |
+ mIsSpeakerOn = audioManager.isSpeakerphoneOn(); |
+ |
+ IntentFilter filter = new IntentFilter(); |
+ filter.addAction(Intent.ACTION_HEADSET_PLUG); |
+ |
+ mReceiver = new BroadcastReceiver() { |
+ @Override |
+ public void onReceive(Context context, Intent intent) { |
+ if (intent.getAction().compareTo(Intent.ACTION_HEADSET_PLUG) == 0 ) { |
Yaron
2013/03/21 16:51:31
Why compareTo? It's a string, just do .equals. Als
leozwang1
2013/03/21 18:51:35
Done.
|
+ int state = intent.getIntExtra("state", 0); |
+ Log.v(TAG, "Intent.ACTION_HEADSET_PLUG state: " + state); |
+ AudioManager audioManager = |
+ (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); |
+ if (null == audioManager) { |
+ Log.d(TAG, "AudioManager is null"); |
+ return; |
+ } |
+ if (AudioManager.MODE_IN_COMMUNICATION != audioManager.getMode()) { |
+ Log.d(TAG, "Not in MODE_IN_COMMUNICATION"); |
+ return; |
+ } |
+ // state 0 for unplugged, 1 for plugged. |
+ if (1 == state && hasEarpiece()) { |
+ Log.d(TAG, "Turn off speaker, use earpiece now"); |
+ audioManager.setSpeakerphoneOn(false); |
+ } else { |
+ Log.d(TAG, "Turn on speaker"); |
+ audioManager.setSpeakerphoneOn(true); |
+ } |
+ } |
+ } |
+ }; |
+ mContext.registerReceiver(mReceiver, filter); |
+ } |
+ |
+ @CalledByNative |
+ public void unregisterHeadsetReceiver() { |
+ if ( mReceiver == null ) { |
nilesh
2013/03/21 16:42:33
Extra spaces here.
leozwang1
2013/03/21 18:51:35
Done.
|
+ return; |
+ } |
+ mContext.unregisterReceiver(mReceiver); |
+ mReceiver = null; |
+ |
+ AudioManager audioManager = |
+ (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); |
+ if (null == audioManager) { |
+ Log.d(TAG, "AudioManager is null"); |
+ return; |
+ } |
+ audioManager.setSpeakerphoneOn(mIsSpeakerOn); |
+ } |
+ |
+ private boolean hasEarpiece() { |
+ TelephonyManager tm = |
+ (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE); |
+ return tm.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE; |
nilesh
2013/03/21 16:42:33
Is there a reason to not check for tm == null?
leozwang1
2013/03/21 18:51:35
Done.
|
+ } |
} |