Merge "Dialer's fab in EmergencyDialer" into lmp-dev
diff --git a/sip/src/com/android/services/telephony/sip/SipUtil.java b/sip/src/com/android/services/telephony/sip/SipUtil.java
index c16714d..7186c6c 100644
--- a/sip/src/com/android/services/telephony/sip/SipUtil.java
+++ b/sip/src/com/android/services/telephony/sip/SipUtil.java
@@ -30,8 +30,7 @@
 import android.telecomm.PhoneAccountHandle;
 import android.telecomm.TelecommManager;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.ArrayList;
 
 public class SipUtil {
     static final String LOG_TAG = "SIP";
@@ -102,7 +101,8 @@
         PhoneAccountHandle accountHandle =
                 SipUtil.createAccountHandle(context, profile.getUriString());
 
-        List supportedUriSchemes = Arrays.asList(PhoneAccount.SCHEME_SIP);
+        final ArrayList<String> supportedUriSchemes = new ArrayList<String>();
+        supportedUriSchemes.add(PhoneAccount.SCHEME_SIP);
         if (useSipForPstnCalls(context)) {
             supportedUriSchemes.add(PhoneAccount.SCHEME_TEL);
         }
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 531e1e2..91fd49e 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -30,6 +30,7 @@
 import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.Connection.PostDialListener;
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.imsphone.ImsPhoneConnection;
 
 import java.lang.Override;
 import java.util.Objects;
@@ -326,6 +327,7 @@
         int newCallCapabilities = buildCallCapabilities();
         newCallCapabilities = applyVideoCapabilities(newCallCapabilities);
         newCallCapabilities = applyAudioQualityCapabilities(newCallCapabilities);
+        newCallCapabilities = applyConferenceTerminationCapabilities(newCallCapabilities);
 
         if (getCallCapabilities() != newCallCapabilities) {
             setCallCapabilities(newCallCapabilities);
@@ -580,6 +582,27 @@
     }
 
     /**
+     * Applies capabilities specific to conferences termination to the
+     * {@code CallCapabilities} bit-mask.
+     *
+     * @param callCapabilities The {@code CallCapabilities} bit-mask.
+     * @return The capabilities with the IMS conference capabilities applied.
+     */
+    private int applyConferenceTerminationCapabilities(int callCapabilities) {
+        int currentCapabilities = callCapabilities;
+
+        // An IMS call cannot be individually disconnected or separated from its parent conference
+        boolean isImsCall = getOriginalConnection() instanceof ImsPhoneConnection;
+        if (!isImsCall) {
+            currentCapabilities |=
+                    PhoneCapabilities.DISCONNECT_FROM_CONFERENCE
+                    | PhoneCapabilities.SEPARATE_FROM_CONFERENCE;
+        }
+
+        return currentCapabilities;
+    }
+
+    /**
      * Returns the local video capability state for the connection.
      *
      * @return {@code True} if the connection has local video capabilities.
@@ -630,6 +653,13 @@
         updateCallCapabilities();
     }
 
+    /**
+     * Obtains the current call audio quality.
+     */
+    public int getAudioQuality() {
+        return mAudioQuality;
+    }
+
     private static Uri getAddressFromNumber(String number) {
         // Address can be null for blocked calls.
         if (number == null) {