IMS: This patch includes:
Libin.Tang@motorola.com [Thu, 7 Aug 2014 20:02:08 +0000 (15:02 -0500)]
1. change setProvisionedValue/setProvisionedStringValue to
return operation result.
2 . add additional IMS config.

Change-Id: I460e50e1066cca1751d5aa3ec37c976a91a23f94

src/java/com/android/ims/ImsConfig.java
src/java/com/android/ims/ImsManager.java

index 4775ebc..6627a68 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.android.ims;
 
+import android.content.Context;
 import android.os.RemoteException;
 import android.telephony.Rlog;
 
@@ -34,6 +35,8 @@ public class ImsConfig {
     private static final String TAG = "ImsConfig";
     private boolean DBG = true;
     private final IImsConfig miConfig;
+    private Context mContext;
+    private static final String MODIFY_PHONE_STATE = android.Manifest.permission.MODIFY_PHONE_STATE;
 
     /**
     * Defines IMS service/capability feature constants.
@@ -102,7 +105,7 @@ public class ImsConfig {
         public static final int MIN_SE = 3;
 
         /**
-         * SIP_INVITE cancellation time out value. Integer format.
+         * SIP_INVITE cancellation time out value (in milliseconds). Integer format.
          * Value is in Integer format.
          */
         public static final int CANCELLATION_TIMER = 4;
@@ -120,19 +123,19 @@ public class ImsConfig {
         public static final int SILENT_REDIAL_ENABLE = 6;
 
         /**
-         * SIP T1 timer value in seconds. See RFC 3261 for define.
+         * SIP T1 timer value in milliseconds. See RFC 3261 for define.
          * Value is in Integer format.
          */
         public static final int SIP_T1_TIMER = 7;
 
         /**
-         * SIP T2 timer value in seconds.  See RFC 3261 for define.
+         * SIP T2 timer value in milliseconds.  See RFC 3261 for define.
          * Value is in Integer format.
          */
         public static final int SIP_T2_TIMER  = 8;
 
          /**
-         * SIP TF timer value in seconds.  See RFC 3261 for define.
+         * SIP TF timer value in milliseconds.  See RFC 3261 for define.
          * Value is in Integer format.
          */
         public static final int SIP_TF_TIMER = 9;
@@ -148,10 +151,69 @@ public class ImsConfig {
          * Value is in Integer format.
          */
         public static final int LVC_SETTING_ENABLED = 11;
-
+        /**
+         * Domain Name for the device to populate the request URI for REGISTRATION.
+         * Value is in String format.
+         */
+        public static final int DOMAIN_NAME = 12;
+         /**
+         * Device Outgoing SMS based on either 3GPP or 3GPP2 standards.
+         * Value is in Integer format. 3GPP2(0), 3GPP(1)
+         */
+        public static final int SMS_FORMAT = 13;
+         /**
+         * Turns IMS ON/OFF on the device.
+         * Value is in Integer format. ON (1), OFF(0).
+         */
+        public static final int SMS_OVER_IP = 14;
+        /**
+         * Requested expiration for Published Online availability.
+         * Value is in Integer format.
+         */
+        public static final int PUBLISH_TIMER = 15;
+        /**
+         * Requested expiration for Published Offline availability.
+         * Value is in Integer format.
+         */
+        public static final int PUBLISH_TIMER_EXTENDED = 16;
+        /**
+         * Period of time the capability information of the  contact is cached on handset.
+         * Value is in Integer format.
+         */
+        public static final int CAPABILITIES_CACHE_EXPIRATION = 17;
+        /**
+         * Peiod of time the availability information of a contact is cached on device.
+         * Value is in Integer format.
+         */
+        public static final int AVAILABILITY_CACHE_EXPIRATION = 18;
+        /**
+         * Interval between successive capabilities polling.
+         * Value is in Integer format.
+         */
+        public static final int CAPABILITIES_POLL_INTERVAL = 19;
+        /**
+         * Minimum time between two published messages from the device.
+         * Value is in Integer format.
+         */
+        public static final int SOURCE_THROTTLE_PUBLISH = 20;
+        /**
+         * The Maximum number of MDNs contained in one Request Contained List.
+         * Value is in Integer format.
+         */
+        public static final int MAX_NUMENTRIES_IN_RCL = 21;
+        /**
+         * Expiration timer for subscription of a Request Contained List, used in capability polling.
+         * Value is in Integer format.
+         */
+        public static final int CAPAB_POLL_LIST_SUB_EXP = 22;
+        /**
+         * Applies compression to LIST Subscription.
+         * Value is in Integer format. Enable (1), Disable(0).
+         */
+        public static final int GZIP_FLAG = 23;
         // Expand the operator config items as needed here, need to change
         // PROVISIONED_CONFIG_END after that.
-        public static final int PROVISIONED_CONFIG_END = LVC_SETTING_ENABLED;
+        public static final int PROVISIONED_CONFIG_END = GZIP_FLAG;
 
         // Expand the operator config items as needed here.
     }
@@ -176,9 +238,10 @@ public class ImsConfig {
         public static final int ON = 1;
     }
 
-    public ImsConfig(IImsConfig iconfig) {
+    public ImsConfig(IImsConfig iconfig, Context context) {
         if (DBG) Rlog.d(TAG, "ImsConfig creates");
         miConfig = iconfig;
+        mContext = context;
     }
 
     /**
@@ -219,7 +282,7 @@ public class ImsConfig {
         try {
             ret = miConfig.getMasterStringValue(item);
         }  catch (RemoteException e) {
-            throw new ImsException("getStringValue()", e,
+            throw new ImsException("getMasterStringValue()", e,
                     ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
         }
         if (DBG) Rlog.d(TAG, "getMasterStringValue(): item = " + item + ", ret =" + ret);
@@ -235,23 +298,29 @@ public class ImsConfig {
      *
      * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
      * @param value in Integer format.
-     * @return void
+     * @return as defined in com.android.ims.ImsConfig#OperationStatusConstants
      *
      * @throws ImsException if calling the IMS service results in an error.
      */
-    public void setProvisionedValue(int item, int value)
+    public int setProvisionedValue(int item, int value)
             throws ImsException {
-        // TODO: ADD PERMISSION CHECK
+        mContext.enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, null);
+        int ret = ImsConfig.OperationStatusConstants.UNKNOWN;
         if (DBG) {
             Rlog.d(TAG, "setProvisionedValue(): item = " + item +
                     "value = " + value);
         }
         try {
-            miConfig.setProvisionedValue(item, value);
+            ret = miConfig.setProvisionedValue(item, value);
         }  catch (RemoteException e) {
             throw new ImsException("setProvisionedValue()", e,
                     ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
         }
+        if (DBG) {
+            Rlog.d(TAG, "setProvisionedValue(): item = " + item +
+                    " value = " + value + " ret = " + ret);
+        }
+        return ret;
     }
 
     /**
@@ -260,23 +329,25 @@ public class ImsConfig {
      *
      * @param item, as defined in com.android.ims.ImsConfig#ConfigConstants.
      * @param value in String format.
-     * @return void.
+     * @return as defined in com.android.ims.ImsConfig#OperationStatusConstants
      *
      * @throws ImsException if calling the IMS service results in an error.
      */
-    public void setProvisionedStringValue(int item, String value)
+    public int setProvisionedStringValue(int item, String value)
             throws ImsException {
-        // TODO: ADD PERMISSION CHECK
-        if (DBG) {
-            Rlog.d(TAG, "setProvisionedStringValue(): item = " + item +
-                    ", value =" + value);
-        }
+        mContext.enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, null);
+        int ret = ImsConfig.OperationStatusConstants.UNKNOWN;
         try {
-            miConfig.setProvisionedStringValue(item, value);
+            ret = miConfig.setProvisionedStringValue(item, value);
         }  catch (RemoteException e) {
             throw new ImsException("setProvisionedStringValue()", e,
                     ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
         }
+        if (DBG) {
+            Rlog.d(TAG, "setProvisionedStringValue(): item = " + item +
+                    ", value =" + value);
+        }
+        return ret;
     }
 
     /**
@@ -316,7 +387,7 @@ public class ImsConfig {
      */
     public void setFeatureValue(int feature, int network, int value,
             ImsConfigListener listener) throws ImsException {
-        // TODO: ADD PERMISSION CHECK (should there be permission, same as provisioning?)
+        mContext.enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, null);
         if (DBG) {
             Rlog.d(TAG, "setFeatureValue: feature = " + feature + ", network =" + network +
                     ", value =" + value + ", listener =" + listener);
index 04fdecc..e74c7ae 100644 (file)
@@ -487,7 +487,7 @@ public class ImsManager {
                     throw new ImsException("getConfigInterface()",
                             ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
                 }
-                mConfig = new ImsConfig(config);
+                mConfig = new ImsConfig(config, mContext);
             } catch (RemoteException e) {
                 throw new ImsException("getConfigInterface()", e,
                         ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);