public void setMode(int mode, IBinder cb) {
if (DEBUG_MODE) { Log.v(TAG, "setMode(mode=" + mode + ")"); }
if (!checkAudioSettingsPermission("setMode()")) {
if (DEBUG_VOL) Log.e(TAG, "setMode: No permission!");
return;
}
//AAAA Add begin
if((mode == AudioSystem.MODE_IN_COMMUNICATION) && ( (mMode == AudioSystem.MODE_IN_CALL) || (mMode == AudioSystem.MODE_IN_CALL_2)))
{
Log.w(TAG, "MODIFY_PHONE_STATE Permission Denial: Current mode is in call");
return;
}
//AAAA Add end
if ( (mode == AudioSystem.MODE_IN_CALL) &&
(mContext.checkCallingOrSelfPermission(
android.Manifest.permission.MODIFY_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED)) {
Log.w(TAG, "MODIFY_PHONE_STATE Permission Denial: setMode(MODE_IN_CALL) from pid="
+ Binder.getCallingPid() + ", uid=" + Binder.getCallingUid());
return;
}
if (mode < AudioSystem.MODE_CURRENT || mode >= AudioSystem.NUM_MODES) {
if (DEBUG_VOL) Log.e(TAG, "setMode: Invalid mode!");
return;
}
//#ifdef VENDOR_EDIT
//Yujie.Wei@EXp.GeneralApp.audio. 2016/03/16, add for judge whether voip call
Intent broadcast = new Intent("android.media.OPPO_VOIP");
if(AudioManager.MODE_IN_COMMUNICATION == mode) {
broadcast.putExtra("android.media.OPPO_VOIP_EXTRA", 1);
}
else{
broadcast.putExtra("android.media.OPPO_VOIP_EXTRA", 0);
}
sendBroadcastToAll(broadcast);
//#endif /* VENDOR_EDIT */
int newModeOwnerPid = 0;
synchronized(mSetModeDeathHandlers) {
if (mode == AudioSystem.MODE_CURRENT) {
mode = mMode;
}
newModeOwnerPid = setModeInt(mode, cb, Binder.getCallingPid());
}
// when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all
// SCO connections not started by the application changing the mode
if (newModeOwnerPid != 0) {
disconnectBluetoothSco(newModeOwnerPid);
}
}