Chromium Code Reviews| 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.
|
| + } |
| } |