Adding HOLD capability and passing it through the Service.

Change-Id: Ia4906ab4eaa601b12e06d151fed6e3b5f63958a3
diff --git a/common/src/com/android/services/telephony/common/Call.java b/common/src/com/android/services/telephony/common/Call.java
index 09874d5..0b4abb7 100644
--- a/common/src/com/android/services/telephony/common/Call.java
+++ b/common/src/com/android/services/telephony/common/Call.java
@@ -49,9 +49,9 @@
      * Defines a set of capabilities that a call can have as a bit mask.
      */
     public static class Capabilities {
-        public static final int MERGE = 0x00000001;    /* has ability to merge with another call. */
+        public static final int HOLD = 0x00000001;    /* has ability to hold the call */
 
-        public static final int ALL = MERGE;
+        public static final int ALL = HOLD;
     }
 
     /**
diff --git a/src/com/android/phone/CallModeler.java b/src/com/android/phone/CallModeler.java
index 7f0c5c5..dcd11f7 100644
--- a/src/com/android/phone/CallModeler.java
+++ b/src/com/android/phone/CallModeler.java
@@ -30,7 +30,9 @@
 import com.android.internal.telephony.CallManager;
 import com.android.internal.telephony.Connection;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.TelephonyCapabilities;
 import com.android.services.telephony.common.Call;
+import com.android.services.telephony.common.Call.Capabilities;
 import com.android.services.telephony.common.Call.State;
 
 import java.util.ArrayList;
@@ -262,9 +264,30 @@
             changed = true;
         }
 
+        final int newCapabilities = getCapabilitiesFor(connection);
+        if (call.getCapabilities() != newCapabilities) {
+            call.setCapabilities(newCapabilities);
+            changed = true;
+        }
+
         return changed;
     }
 
+    /**
+     * Returns a mask of capabilities for the connection such as merge, hold, etc.
+     */
+    private int getCapabilitiesFor(Connection connection) {
+        int retval = 0x0;
+
+        final boolean hold = TelephonyCapabilities.supportsAnswerAndHold(connection.getCall().getPhone());
+
+        if (hold) {
+            retval |= Capabilities.HOLD;
+        }
+
+        return retval;
+    }
+
     private int translateStateFromTelephony(com.android.internal.telephony.Call.State teleState) {
         int retval = State.IDLE;
         switch (teleState) {