Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e544863 authored by yueg's avatar yueg Committed by Copybara-Service
Browse files

Use sensible audio route for bubble mode.

Bug: 74022483
Test: InCallPresenterTest
PiperOrigin-RevId: 191941513
Change-Id: If2090c6dae63981a46586d785e2836edbdf8a729
parent 7c4d9bb8
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -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