summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hall Liu <hallliu@google.com> 2019-11-11 20:56:30 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2019-11-11 20:56:30 +0000
commite8a5b8a76d30c21067a5ce391b15e1da750eb84c (patch)
tree811711d6b8d6d07642a929bd215494553bc73c2f
parentc7ed3e7e2244879e75519080c4d07808cf23e9e0 (diff)
parentfc2be9c0d2beddfbff420d64c0af3d287327a2ee (diff)
Merge "Fix double-add of calls"
-rw-r--r--telecomm/java/android/telecom/Phone.java27
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);
}
}