diff options
Diffstat (limited to 'java/com/android/incallui')
-rw-r--r-- | java/com/android/incallui/InCallPresenter.java | 33 |
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 |