From 4613e8f41f7106bc22e0d976cab45baecdbe354a Mon Sep 17 00:00:00 2001 From: yueg Date: Mon, 23 Apr 2018 13:35:33 -0700 Subject: Check call configuration for every call instead of every InCallService bound. Bug: 74022483 Test: InCallPresenterTest PiperOrigin-RevId: 193975862 Change-Id: I7b5bdbd986b3f4a543e1591d06a0829b7fe72e6a --- java/com/android/incallui/InCallPresenter.java | 42 +++++++++++++++++--------- 1 file changed, 28 insertions(+), 14 deletions(-) (limited to 'java/com/android/incallui/InCallPresenter.java') diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java index 1dc150d56..5e08c6969 100644 --- a/java/com/android/incallui/InCallPresenter.java +++ b/java/com/android/incallui/InCallPresenter.java @@ -268,7 +268,6 @@ 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. */ @@ -336,8 +335,7 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud ContactInfoCache contactInfoCache, ProximitySensor proximitySensor, FilteredNumberAsyncQueryHandler filteredNumberQueryHandler, - @NonNull SpeakEasyCallManager speakEasyCallManager, - Intent intent) { + @NonNull SpeakEasyCallManager speakEasyCallManager) { Trace.beginSection("InCallPresenter.setUp"); if (serviceConnected) { LogUtil.i("InCallPresenter.setUp", "New service connection replacing existing one."); @@ -403,8 +401,6 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud addInCallUiListener(motorolaInCallUiNotifier); addListener(motorolaInCallUiNotifier); - this.shouldStartInBubbleMode = shouldStartInBubbleMode(intent); - LogUtil.d("InCallPresenter.setUp", "Finished InCallPresenter.setUp"); Trace.endSection(); } @@ -413,15 +409,33 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud * Return whether we should start call in bubble mode and not show InCallActivity. The call mode * should be set in CallConfiguration in EXTRA_OUTGOING_CALL_EXTRAS when starting a call intent. */ - private boolean shouldStartInBubbleMode(Intent intent) { + private boolean shouldStartInBubbleMode() { + if (!ReturnToCallController.isEnabled(context)) { + return false; + } + + // We only start in Bubble mode for outgoing call + DialerCall dialerCall = callList.getPendingOutgoingCall(); + if (dialerCall == null) { + dialerCall = callList.getOutgoingCall(); + } + if (dialerCall == null) { + return false; + } + + Bundle extras = dialerCall.getIntentExtras(); + return shouldStartInBubbleModeWithExtras(extras); + } + + private boolean shouldStartInBubbleModeWithExtras(Bundle outgoingExtras) { if (!ReturnToCallController.isEnabled(context)) { return false; } - if (!intent.hasExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS)) { + + if (outgoingExtras == null) { return false; } - Bundle extras = intent.getParcelableExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS); - byte[] callConfigurationByteArray = extras.getByteArray(CALL_CONFIGURATION_EXTRA); + byte[] callConfigurationByteArray = outgoingExtras.getByteArray(CALL_CONFIGURATION_EXTRA); if (callConfigurationByteArray == null) { return false; } @@ -1493,7 +1507,7 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud inCallActivity.dismissPendingDialogs(); } - if ((showCallUi || showAccountPicker) && !shouldStartInBubbleMode) { + if ((showCallUi || showAccountPicker) && !shouldStartInBubbleMode()) { LogUtil.i("InCallPresenter.startOrFinishUi", "Start in call UI"); showInCall(false /* showDialpad */, !showAccountPicker /* newOutgoingCall */); } else if (newState == InCallState.NO_CALLS) { @@ -1554,7 +1568,6 @@ 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 @@ -1647,7 +1660,7 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud setBoundAndWaitingForOutgoingCall(true, accountHandle); - if (shouldStartInBubbleMode) { + if (shouldStartInBubbleModeWithExtras(extras)) { LogUtil.i("InCallPresenter.maybeStartRevealAnimation", "shouldStartInBubbleMode"); // Show bubble instead of in call UI return; @@ -1838,8 +1851,9 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud 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) { + // SUPPORTED_AUDIO_ROUTE_ALL, but it's OK since shouldStartInBubbleMode() is false at that time + // (callList not updated yet). + if (!audioRouteSetForBubbleMode && shouldStartInBubbleMode()) { setAudioRouteForBubbleMode(audioState); audioRouteSetForBubbleMode = true; } -- cgit v1.2.3