Merge "Update call capabilities when call is removed" into lmp-dev
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index edb3a38..a0a8a62 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -557,8 +557,12 @@
     }
 
     void setCallCapabilities(int callCapabilities) {
+        setCallCapabilities(callCapabilities, false /* forceUpdate */);
+    }
+
+    void setCallCapabilities(int callCapabilities, boolean forceUpdate) {
         Log.v(this, "setCallCapabilities: %s", PhoneCapabilities.toString(callCapabilities));
-        if (mCallCapabilities != callCapabilities) {
+        if (forceUpdate || mCallCapabilities != callCapabilities) {
            mCallCapabilities = callCapabilities;
             for (Listener l : mListeners) {
                 l.onCallCapabilitiesChanged(this);
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index d422db6..d714a6b 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -996,6 +996,14 @@
             }
             updateForegroundCall();
         }
+
+        // Now that a call has been removed, other calls may gain new call capabilities (for
+        // example, if only one call is left, it is now add-call capable again). Trigger the
+        // recalculation of the call's current capabilities by forcing an update. (See
+        // InCallController.toParcelableCall()).
+        for (Call otherCall : mCalls) {
+            otherCall.setCallCapabilities(call.getCallCapabilities(), true /* forceUpdate */);
+        }
     }
 
     /**