summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--java/com/android/incallui/InCallPresenter.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index b5e76ee76..7ea2fadf3 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -271,6 +271,7 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud
private SpeakEasyCallManager speakEasyCallManager;
private boolean shouldStartInBubbleMode;
+ private boolean audioRouteSetForBubbleMode;
/** Inaccessible constructor. Must use getRunningInstance() to get this singleton. */
@VisibleForTesting
@@ -1498,6 +1499,7 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud
showInCall(false /* showDialpad */, !showAccountPicker /* newOutgoingCall */);
} else if (newState == InCallState.NO_CALLS) {
// The new state is the no calls state. Tear everything down.
+ inCallState = newState;
attemptFinishActivity();
attemptCleanup();
}
@@ -1554,6 +1556,7 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud
isChangingConfigurations = false;
shouldStartInBubbleMode = false;
+ audioRouteSetForBubbleMode = false;
// blow away stale contact info so that we get fresh data on
// the next set of calls
@@ -1834,11 +1837,41 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud
@Override
public void onAudioStateChanged(CallAudioState audioState) {
+ // Set sensible audio route for bubble mode when we get real audio state for the first time
+ // During the first time this function is called, supportedRouteMask is set to
+ // SUPPORTED_AUDIO_ROUTE_ALL, but it's OK since shouldStartInBubbleMode is not set at that time.
+ if (!audioRouteSetForBubbleMode && shouldStartInBubbleMode) {
+ setAudioRouteForBubbleMode(audioState);
+ audioRouteSetForBubbleMode = true;
+ }
+
if (statusBarNotifier != null) {
statusBarNotifier.updateNotification();
}
}
+ /**
+ * Set audio route to make audio sensible. According to availability, set audio route to Bluetooth
+ * or wired headset or speaker.
+ */
+ private void setAudioRouteForBubbleMode(CallAudioState audioState) {
+ if ((audioState.getSupportedRouteMask() & CallAudioState.ROUTE_BLUETOOTH)
+ == CallAudioState.ROUTE_BLUETOOTH) {
+ // Use Bluetooth if available
+ TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);
+ LogUtil.i("InCallPrenter.setAudioRouteForBubbleMode", "bluetooth");
+ } else if ((audioState.getSupportedRouteMask() & CallAudioState.ROUTE_WIRED_HEADSET)
+ == CallAudioState.ROUTE_WIRED_HEADSET) {
+ // Use wired headset if available
+ TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_WIRED_HEADSET);
+ LogUtil.i("InCallPrenter.setAudioRouteForBubbleMode", "wired headset");
+ } else {
+ // Use speaker
+ TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_SPEAKER);
+ LogUtil.i("InCallPrenter.setAudioRouteForBubbleMode", "speaker");
+ }
+ }
+
/** All the main states of InCallActivity. */
public enum InCallState {
// InCall Screen is off and there are no calls