diff options
author | 2019-11-11 20:56:30 +0000 | |
---|---|---|
committer | 2019-11-11 20:56:30 +0000 | |
commit | e8a5b8a76d30c21067a5ce391b15e1da750eb84c (patch) | |
tree | 811711d6b8d6d07642a929bd215494553bc73c2f | |
parent | c7ed3e7e2244879e75519080c4d07808cf23e9e0 (diff) | |
parent | fc2be9c0d2beddfbff420d64c0af3d287327a2ee (diff) |
Merge "Fix double-add of calls"
-rw-r--r-- | telecomm/java/android/telecom/Phone.java | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/telecomm/java/android/telecom/Phone.java b/telecomm/java/android/telecom/Phone.java index 2ecdb3035685..61a639a1a235 100644 --- a/telecomm/java/android/telecom/Phone.java +++ b/telecomm/java/android/telecom/Phone.java @@ -152,13 +152,20 @@ public final class Phone { return; } - Call call = new Call(this, parcelableCall.getId(), mInCallAdapter, - parcelableCall.getState(), mCallingPackage, mTargetSdkVersion); - mCallByTelecomCallId.put(parcelableCall.getId(), call); - mCalls.add(call); - checkCallTree(parcelableCall); - call.internalUpdate(parcelableCall, mCallByTelecomCallId); - fireCallAdded(call); + Call call = mCallByTelecomCallId.get(parcelableCall.getId()); + if (call == null) { + call = new Call(this, parcelableCall.getId(), mInCallAdapter, + parcelableCall.getState(), mCallingPackage, mTargetSdkVersion); + mCallByTelecomCallId.put(parcelableCall.getId(), call); + mCalls.add(call); + checkCallTree(parcelableCall); + call.internalUpdate(parcelableCall, mCallByTelecomCallId); + fireCallAdded(call); + } else { + Log.w(this, "Call %s added, but it was already present", call.internalGetCallId()); + checkCallTree(parcelableCall); + call.internalUpdate(parcelableCall, mCallByTelecomCallId); + } } final void internalRemoveCall(Call call) { @@ -190,7 +197,11 @@ public final class Phone { } else { // This call may have come out of audio processing. Try adding it if our target sdk // version is low enough. - if (mTargetSdkVersion < SDK_VERSION_R) { + // The only two allowable states coming out of audio processing are ACTIVE and + // SIMULATED_RINGING. + if (mTargetSdkVersion < SDK_VERSION_R && (parcelableCall.getState() == Call.STATE_ACTIVE + || parcelableCall.getState() == Call.STATE_SIMULATED_RINGING)) { + Log.i(this, "adding call during update for sdk compatibility"); internalAddCall(parcelableCall); } } |