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,20 +4,119 @@ |
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 = AudioManagerAndroid.class.getSimpleName(); |
+ |
+ private BroadcastReceiver mReceiver = null; |
+ private Context mContext = null; |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
The Java language does an implicit =null for you;
leozwang1
2013/03/21 23:10:07
Done.
|
+ |
+ private boolean mIsSpeakerOn; |
+ |
+ private static final int kPhoneTypeError = -1; |
qinmin
2013/03/21 21:19:38
java don't use this style. constants should be def
leozwang1
2013/03/21 23:10:07
Done.
|
+ private static final int kPhoneTypeNone = 0; |
+ private static final int kPhoneTypePhone = 1; |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
"phonetypephone"? Really?
leozwang1
2013/03/21 23:10:07
Done.
leozwang1
2013/03/21 23:10:07
these are removed.
|
+ |
+ private static final int kPlugged = 1; |
+ private static final int kUnplugged = 0; |
+ |
@CalledByNative |
- public static void setMode(Context context, int mode) { |
- AudioManager audioManager = |
- (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); |
+ public void setMode(int mode) { |
+ AudioManager audioManager = getAudioManager(); |
if (null != audioManager) { |
audioManager.setMode(mode); |
} |
} |
+ |
+ @CalledByNative |
+ private static AudioManagerAndroid createAudioManagerAndroid(Context context) { |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
Why not just use the ctor? Are there auto-binding
leozwang1
2013/03/21 23:10:07
ctor binding doesn't exist in auto-generated jni f
|
+ return new AudioManagerAndroid(context); |
+ } |
+ |
+ private AudioManagerAndroid(Context context) { |
+ mContext = context; |
+ } |
+ |
+ @CalledByNative |
+ public void registerHeadsetReceiver() { |
+ AudioManager audioManager = getAudioManager(); |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
If this was final you could drop the copy/pasta at
leozwang1
2013/03/21 23:10:07
Done.
|
+ if (null == audioManager) { |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
please reverse these comparisons to have the const
leozwang1
2013/03/21 23:10:07
Done.
|
+ return; |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
When can this be true?
|
+ } |
+ mIsSpeakerOn = audioManager.isSpeakerphoneOn(); |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
mOriginalSpeakerStatus ?
leozwang1
2013/03/21 23:10:07
Done.
|
+ |
+ IntentFilter filter = new IntentFilter(); |
+ filter.addAction(Intent.ACTION_HEADSET_PLUG); |
+ |
+ mReceiver = new BroadcastReceiver() { |
+ @Override |
+ public void onReceive(Context context, Intent intent) { |
+ if (Intent.ACTION_HEADSET_PLUG.equals(intent.getAction())) { |
+ int state = intent.getIntExtra("state", 0); |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
s/0/kUnplugged/
leozwang1
2013/03/21 23:10:07
Done.
leozwang1
2013/03/21 23:10:07
Done.
|
+ AudioManager audioManager = getAudioManager(); |
+ if (null == audioManager || |
+ AudioManager.MODE_IN_COMMUNICATION != audioManager.getMode()) { |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
How can this fail to be true?
|
+ return; |
+ } |
+ int ep = hasEarpiece(); |
+ if (kPhoneTypeError == ep) { |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
why isn't this using a Java enum with a switch sta
leozwang1
2013/03/21 23:10:07
Done.
|
+ return; |
+ } |
+ // state 0 for unplugged, 1 for plugged. |
+ if (kPlugged == state && kPhoneTypePhone == ep) { |
+ audioManager.setSpeakerphoneOn(false); |
+ } else { |
+ audioManager.setSpeakerphoneOn(true); |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
l.72-81 can be summarized as:
audioManager.setSpea
|
+ } |
+ } |
+ } |
+ }; |
+ if (null == mReceiver) { |
nilesh
2013/03/21 21:02:48
Why would mReceiver be null here. You assign it on
leozwang1
2013/03/21 23:10:07
Done.
|
+ return; |
+ } |
+ mContext.registerReceiver(mReceiver, filter); |
+ } |
+ |
+ @CalledByNative |
+ public void unregisterHeadsetReceiver() { |
+ if (mReceiver == null) { |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
how can this be true?
leozwang1
2013/03/21 23:10:07
Done.
|
+ return; |
+ } |
+ mContext.unregisterReceiver(mReceiver); |
+ mReceiver = null; |
+ |
+ AudioManager audioManager = |
+ (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
use getAudioManager()
leozwang1
2013/03/21 23:10:07
Done.
|
+ if (null == audioManager) { |
+ return; |
+ } |
+ audioManager.setSpeakerphoneOn(mIsSpeakerOn); |
+ } |
+ |
+ private int hasEarpiece() { |
+ TelephonyManager tm = |
+ (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE); |
+ if (null == tm) { |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
how can this fail?
leozwang1
2013/03/21 23:10:07
Done.
|
+ return -1; |
qinmin
2013/03/21 21:19:38
return kPhoneTypeError
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
kPhoneTypeError?
leozwang1
2013/03/21 23:10:07
Done.
|
+ } |
+ return tm.getPhoneType() != |
+ TelephonyManager.PHONE_TYPE_NONE ? kPhoneTypePhone : kPhoneTypeNone; |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
What does SIP/GSM/CDMA have to do with having an e
leozwang1
2013/03/21 23:10:07
This function is wrong, thanks for pointing it out
|
+ } |
+ |
+ private AudioManager getAudioManager() { |
+ return null == mContext ? |
Ami GONE FROM CHROMIUM
2013/03/21 21:26:21
how can this be false?
leozwang1
2013/03/21 23:10:07
Done.
|
+ null : (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); |
+ } |
+ |
} |