From 385a5a1e620bf1ecf465d9f60b13b98482bc5c53 Mon Sep 17 00:00:00 2001 From: wangqi Date: Thu, 28 Sep 2017 10:44:54 -0700 Subject: Fix crash on incoming video call when video upgrade call is pending. This is a upstream fix from AOSP: https://android-review.googlesource.com/#/c/platform/packages/apps/Dialer/+/475598/ Bug: 63608380 Test: none PiperOrigin-RevId: 170365033 Change-Id: Id58cf4c67a3b0144521622a14997a83403017bee --- java/com/android/incallui/CallCardPresenter.java | 6 +++--- java/com/android/incallui/VideoCallPresenter.java | 25 +++++++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) (limited to 'java') diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java index 15b04eaaf..be9b3ef6c 100644 --- a/java/com/android/incallui/CallCardPresenter.java +++ b/java/com/android/incallui/CallCardPresenter.java @@ -142,7 +142,7 @@ public class CallCardPresenter }; public CallCardPresenter(Context context) { - LogUtil.i("CallCardController.constructor", null); + LogUtil.i("CallCardPresenter.constructor", null); mContext = Assert.isNotNull(context).getApplicationContext(); callLocation = CallLocationComponent.get(mContext).getCallLocation(); } @@ -179,7 +179,7 @@ public class CallCardPresenter @Override public void onInCallScreenReady() { - LogUtil.i("CallCardController.onInCallScreenReady", null); + LogUtil.i("CallCardPresenter.onInCallScreenReady", null); Assert.checkState(!isInCallScreenReady); if (mContactsPreferences != null) { mContactsPreferences.refreshValue(ContactsPreferences.DISPLAY_ORDER_KEY); @@ -222,7 +222,7 @@ public class CallCardPresenter @Override public void onInCallScreenUnready() { - LogUtil.i("CallCardController.onInCallScreenUnready", null); + LogUtil.i("CallCardPresenter.onInCallScreenUnready", null); Assert.checkState(isInCallScreenReady); // stop getting call state changes diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java index 89cddb9c4..ab02c3b86 100644 --- a/java/com/android/incallui/VideoCallPresenter.java +++ b/java/com/android/incallui/VideoCallPresenter.java @@ -60,14 +60,14 @@ import java.util.Objects; * layer: * * * *

When downgrading to an audio-only video state, the {@code VideoCallPresenter} nulls both @@ -169,7 +169,7 @@ public class VideoCallPresenter boolean isPaused = VideoProfile.isPaused(videoState); boolean isCallActive = callState == DialerCall.State.ACTIVE; - //Show incoming Video for dialing calls to support early media + // Show incoming Video for dialing calls to support early media boolean isCallOutgoingPending = DialerCall.State.isDialing(callState) || callState == DialerCall.State.CONNECTING; @@ -455,6 +455,13 @@ public class VideoCallPresenter @Override public void onIncomingCall( InCallPresenter.InCallState oldState, InCallPresenter.InCallState newState, DialerCall call) { + // If video call screen ui is already destroyed, this shouldn't be called. But the UI may be + // updated synchronized by {@link CallCardPresenter#onIncomingCall} before this is called, this + // could still be called. Thus just do nothing in this case. + if (!isVideoCallScreenUiReady) { + LogUtil.i("VideoCallPresenter.onIncomingCall", "UI is not ready"); + return; + } // same logic should happen as with onStateChange() onStateChange(oldState, newState, CallList.getInstance()); } -- cgit v1.2.3