Fix for AudioManager mode / One X audio issue + improved traces for audio focus

This commit is contained in:
Sylvain Berfini 2013-06-10 14:16:11 +02:00
parent a9785babf9
commit 84cd341efc
4 changed files with 28 additions and 3 deletions

View file

@ -211,6 +211,7 @@ public class LinphoneManager implements LinphoneCoreListener {
private void routeAudioToSpeakerHelper(boolean speakerOn) {
isUsingBluetoothAudioRoute = false;
if (mAudioManager != null) {
Compatibility.setAudioManagerInCallMode(mAudioManager);
mAudioManager.stopBluetoothSco();
mAudioManager.setBluetoothScoOn(false);
}
@ -1211,7 +1212,9 @@ public class LinphoneManager implements LinphoneCoreListener {
}
if (state == LinphoneCall.State.Connected) {
Log.d("Audio focus requested: " + mAudioManager.requestAudioFocus(null, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN));
if (mLc.getCallsNb() == 1) {
Log.d("Audio focus requested: " + (mAudioManager.requestAudioFocus(null, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED ? "Granted" : "Denied"));
}
}
if (state == IncomingReceived || (state == State.CallIncomingEarlyMedia && mR.getBoolean(R.bool.allow_ringing_while_early_media))) {
@ -1227,7 +1230,10 @@ public class LinphoneManager implements LinphoneCoreListener {
}
if (state == CallEnd || state == Error) {
Log.d("Audio focus released: " + mAudioManager.abandonAudioFocus(null));
if (mLc.getCallsNb() == 0) {
Log.d("Audio focus released: " + (mAudioManager.abandonAudioFocus(null) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED ? "Granted" : "Denied"));
mAudioManager.setMode(AudioManager.MODE_NORMAL);
}
Context activity = getContext();
if (activity != null) {
TelephonyManager tm = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE);
@ -1262,7 +1268,7 @@ public class LinphoneManager implements LinphoneCoreListener {
} else {
Log.i("New call active while incall (CPU only) wake lock already active");
}
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
Compatibility.setAudioManagerInCallMode(mAudioManager);
}
mListenerDispatcher.onCallStateChanged(call, state, message);
}

View file

@ -9,6 +9,7 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.media.AudioManager;
/*
ApiElevenPlus.java
@ -88,4 +89,8 @@ public class ApiElevenPlus {
ClipData clip = android.content.ClipData.newPlainText("Message", msg);
clipboard.setPrimaryClip(clip);
}
public static void setAudioManagerInCallMode(AudioManager manager) {
manager.setMode(AudioManager.MODE_IN_COMMUNICATION);
}
}

View file

@ -25,6 +25,7 @@ import android.database.Cursor;
import android.database.MatrixCursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.AudioManager;
import android.net.Uri;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
@ -432,4 +433,8 @@ public class ApiFivePlus {
public static void removeGlobalLayoutListener(ViewTreeObserver viewTreeObserver, OnGlobalLayoutListener keyboardListener) {
viewTreeObserver.removeGlobalOnLayoutListener(keyboardListener);
}
public static void setAudioManagerInCallMode(AudioManager manager) {
manager.setMode(AudioManager.MODE_IN_CALL);
}
}

View file

@ -34,6 +34,7 @@ import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.net.Uri;
import android.preference.Preference;
import android.view.Display;
@ -268,4 +269,12 @@ public class Compatibility {
ApiFourteenPlus.showNavigationBar(activity);
}
}
public static void setAudioManagerInCallMode(AudioManager manager) {
if (Version.sdkAboveOrEqual(Version.API11_HONEYCOMB_30)) {
ApiElevenPlus.setAudioManagerInCallMode(manager);
} else {
ApiFivePlus.setAudioManagerInCallMode(manager);
}
}
}