Merge "Add missing LICENSE files for UCE code"
diff --git a/rcs/rcsservice/Android.bp b/rcs/rcsservice/Android.bp
index dd965c8..24153a5 100644
--- a/rcs/rcsservice/Android.bp
+++ b/rcs/rcsservice/Android.bp
@@ -28,16 +28,42 @@
 // Build the application : Presence.apk
 //#########################################################################
 
+java_library {
+    name: "ucepresencelib",
+    // We only want this to be used as a static import.
+    installable: false,
+    srcs: [
+        "src/com/android/service/ims/presence/*.java",
+        "src/com/android/service/ims/RcsSettingUtils.java",
+        "src/com/android/service/ims/RcsUtils.java",
+        "src/com/android/service/ims/Task.java",
+        "src/com/android/service/ims/TaskManager.java",
+        // Move the following to the app once the dependencies have been decoupled.
+        "src/com/android/service/ims/RcsStackAdaptor.java"
+    ],
+    libs: [
+        "telephony-common",
+        "ims-common",
+    ],
+    static_libs: ["com.android.ims.rcsmanager"]
+}
+
 android_app {
     // This is the target being built. (Name of APK)
     name: "RcsService",
     platform_apis: true,
     // Only compile source java files in this apk.
-    srcs: ["src/**/*.java"],
-    libs: [
-        "telephony-common",
-        "ims-common",
+    srcs: [
+        "src/com/android/service/ims/DeviceShutdown.java",
+        "src/com/android/service/ims/LauncherUtils.java",
+        "src/com/android/service/ims/RcsService.java",
+        "src/com/android/service/ims/RcsServiceApp.java"
     ],
-    static_libs: ["com.android.ims.rcsmanager"],
+    libs: [
+            "ims-common",
+        ],
+    static_libs: [
+        "ucepresencelib"
+    ],
     certificate: "platform",
 }
diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsService.java b/rcs/rcsservice/src/com/android/service/ims/RcsService.java
index c41e092..953db2f 100644
--- a/rcs/rcsservice/src/com/android/service/ims/RcsService.java
+++ b/rcs/rcsservice/src/com/android/service/ims/RcsService.java
@@ -60,6 +60,8 @@
 import com.android.service.ims.presence.PresencePublication;
 import com.android.service.ims.presence.PresenceSubscriber;
 
+import com.android.service.ims.R;
+
 public class RcsService extends Service{
     /**
      * The logger
@@ -80,10 +82,18 @@
 
         mRcsStackAdaptor = RcsStackAdaptor.getInstance(this);
 
-        mPublication = new PresencePublication(mRcsStackAdaptor, this);
+        mPublication = new PresencePublication(mRcsStackAdaptor, this,
+                getResources().getStringArray(
+                        R.array.config_volte_provision_error_on_publish_response),
+                getResources().getStringArray(
+                        R.array.config_rcs_provision_error_on_publish_response));
         mRcsStackAdaptor.getListener().setPresencePublication(mPublication);
 
-        mSubscriber = new PresenceSubscriber(mRcsStackAdaptor, this);
+        mSubscriber = new PresenceSubscriber(mRcsStackAdaptor, this,
+                getResources().getStringArray(
+                        R.array.config_volte_provision_error_on_subscribe_response),
+                getResources().getStringArray(
+                        R.array.config_rcs_provision_error_on_subscribe_response));
         mRcsStackAdaptor.getListener().setPresenceSubscriber(mSubscriber);
         mPublication.setSubscriber(mSubscriber);
 
diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java b/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java
index d8cd345..902f6c7 100644
--- a/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java
+++ b/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java
@@ -65,7 +65,6 @@
 import com.android.ims.internal.Logger;
 import com.android.ims.internal.ContactNumberUtils;
 import com.android.service.ims.presence.PresencePublication;
-import com.android.service.ims.R;
 
 import com.android.ims.internal.uce.presence.IPresenceService;
 import com.android.ims.internal.uce.presence.PresCapInfo;
@@ -521,7 +520,6 @@
     }
 
     private PendingIntent mRetryAlarmIntent = null;
-    public static final String ACTION_RETRY_ALARM = "com.android.service.ims.presence.retry";
     private AlarmManager mAlarmManager = null;
     private BroadcastReceiver mRcsServiceReceiver = null;
 
@@ -645,7 +643,7 @@
 
             mIsIniting = true;
 
-            Intent intent = new Intent(ACTION_RETRY_ALARM);
+            Intent intent = new Intent(AlarmBroadcastReceiver.ACTION_RETRY_ALARM);
             intent.putExtra("times", times);
             intent.setClass(mContext, AlarmBroadcastReceiver.class);
             mRetryAlarmIntent = PendingIntent.getBroadcast(mContext, 0, intent,
diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/AlarmBroadcastReceiver.java b/rcs/rcsservice/src/com/android/service/ims/presence/AlarmBroadcastReceiver.java
index f02f9ce..cd213a9 100644
--- a/rcs/rcsservice/src/com/android/service/ims/presence/AlarmBroadcastReceiver.java
+++ b/rcs/rcsservice/src/com/android/service/ims/presence/AlarmBroadcastReceiver.java
@@ -40,8 +40,7 @@
 public class AlarmBroadcastReceiver extends BroadcastReceiver{
     private Logger logger = Logger.getLogger(this.getClass().getName());
 
-    private static final String ACTION_RETRY_ALARM =
-            RcsStackAdaptor.ACTION_RETRY_ALARM;
+    public static final String ACTION_RETRY_ALARM = "com.android.service.ims.presence.retry";
     private static final String ACTION_TASK_TIMEOUT_ALARM =
             PresenceCapabilityTask.ACTION_TASK_TIMEOUT_ALARM;
     private static final String ACTION_RETRY_PUBLISH_ALARM =
diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceBase.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceBase.java
index 5f1dfe5..290e650 100644
--- a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceBase.java
+++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceBase.java
@@ -157,10 +157,9 @@
         mContext.sendBroadcast(intent);
     }
 
-    protected boolean isInConfigList(int errorNo, String phrase, int configId) {
+    protected boolean isInConfigList(int errorNo, String phrase, String[] errorArray) {
         String inErrorString = ("" + errorNo).trim();
 
-        String[] errorArray = mContext.getResources().getStringArray(configId);
         logger.debug("errorArray length=" + errorArray.length + " errorArray=" + errorArray);
         for (String errorStr : errorArray) {
             if (errorStr != null && errorStr.startsWith(inErrorString)) {
diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java
index 3e70cf9..e7607ee 100644
--- a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java
+++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java
@@ -76,8 +76,6 @@
 
 import com.android.service.ims.RcsStackAdaptor;
 
-import com.android.service.ims.R;
-
 public class PresencePublication extends PresenceBase {
     private Logger logger = Logger.getLogger(this.getClass().getName());
 
@@ -142,6 +140,8 @@
     private boolean mImsRegistered = false;
     private boolean mVtEnabled = false;
     private boolean mDataEnabled = false;
+    private final String[] mConfigVolteProvisionErrorOnPublishResponse;
+    private final String[] mConfigRcsProvisionErrorOnPublishResponse;
 
     public class PublishType{
         public static final int PRES_PUBLISH_TRIGGER_DATA_CHANGED = 0;
@@ -159,11 +159,15 @@
      * @param rcsStackAdaptor
      * @param context
      */
-    public PresencePublication(RcsStackAdaptor rcsStackAdaptor, Context context) {
+    public PresencePublication(RcsStackAdaptor rcsStackAdaptor, Context context,
+            String[] configVolteProvisionErrorOnPublishResponse,
+            String[] configRcsProvisionErrorOnPublishResponse) {
         super();
         logger.debug("PresencePublication constrcuct");
         this.mRcsStackAdaptor = rcsStackAdaptor;
         this.mContext = context;
+        mConfigVolteProvisionErrorOnPublishResponse = configVolteProvisionErrorOnPublishResponse;
+        mConfigRcsProvisionErrorOnPublishResponse = configRcsProvisionErrorOnPublishResponse;
 
         mVtEnabled = getImsManager().isVtEnabledByUser();
 
@@ -1003,7 +1007,7 @@
         int sipCode = pSipResponse.getSipResponseCode();
 
         if(isInConfigList(sipCode, pSipResponse.getReasonPhrase(),
-                R.array.config_volte_provision_error_on_publish_response)) {
+                mConfigVolteProvisionErrorOnPublishResponse)) {
             logger.print("volte provision error. sipCode=" + sipCode + " phrase=" +
                     pSipResponse.getReasonPhrase());
             setPublishState(PublishState.PUBLISH_STATE_VOLTE_PROVISION_ERROR);
@@ -1015,7 +1019,7 @@
         }
 
         if(isInConfigList(sipCode, pSipResponse.getReasonPhrase(),
-                R.array.config_rcs_provision_error_on_publish_response)) {
+                mConfigRcsProvisionErrorOnPublishResponse)) {
             logger.print("rcs provision error.sipCode=" + sipCode + " phrase=" +
                     pSipResponse.getReasonPhrase());
             setPublishState(PublishState.PUBLISH_STATE_RCS_PROVISION_ERROR);
diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java
index 37c141e..daa2636 100644
--- a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java
+++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java
@@ -74,8 +74,6 @@
 import com.android.service.ims.RcsUtils;
 import com.android.service.ims.RcsSettingUtils;
 
-import com.android.service.ims.R;
-
 public class PresenceSubscriber extends PresenceBase{
     /*
      * The logger
@@ -88,12 +86,20 @@
 
     private String mAvailabilityRetryNumber = null;
 
+    private final String[] mConfigVolteProvisionErrorOnSubscribeResponse;
+    private final String[] mConfigRcsProvisionErrorOnSubscribeResponse;
+
     /*
      * Constructor
      */
-    public PresenceSubscriber(RcsStackAdaptor rcsStackAdaptor, Context context){
+    public PresenceSubscriber(RcsStackAdaptor rcsStackAdaptor, Context context,
+            String[] configVolteProvisionErrorOnSubscribeResponse,
+            String[] configRcsProvisionErrorOnSubscribeResponse){
         mRcsStackAdaptor = rcsStackAdaptor;
         mContext = context;
+        mConfigVolteProvisionErrorOnSubscribeResponse
+                = configVolteProvisionErrorOnSubscribeResponse;
+        mConfigRcsProvisionErrorOnSubscribeResponse = configRcsProvisionErrorOnSubscribeResponse;
     }
 
     private String numberToUriString(String number){
@@ -360,14 +366,12 @@
 
         int sipCode = pSipResponse.getSipResponseCode();
         String phrase = pSipResponse.getReasonPhrase();
-        if(isInConfigList(sipCode, phrase,
-                R.array.config_volte_provision_error_on_subscribe_response)) {
+        if(isInConfigList(sipCode, phrase, mConfigVolteProvisionErrorOnSubscribeResponse)) {
             logger.print("volte provision sipCode=" + sipCode + " phrase=" + phrase);
             mRcsStackAdaptor.setPublishState(PublishState.PUBLISH_STATE_VOLTE_PROVISION_ERROR);
 
             notifyDm();
-        } else if(isInConfigList(sipCode, phrase,
-                R.array.config_rcs_provision_error_on_subscribe_response)) {
+        } else if(isInConfigList(sipCode, phrase, mConfigRcsProvisionErrorOnSubscribeResponse)) {
             logger.print("rcs provision sipCode=" + sipCode + " phrase=" + phrase);
             mRcsStackAdaptor.setPublishState(PublishState.PUBLISH_STATE_RCS_PROVISION_ERROR);
         }
diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java b/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java
index e23ec09..9ca82fc 100644
--- a/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java
+++ b/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java
@@ -65,7 +65,6 @@
 import com.android.service.ims.TaskManager;
 import com.android.service.ims.Task;
 import com.android.service.ims.RcsStackAdaptor;
-import com.android.service.ims.LauncherUtils;
 
 public class StackListener extends Handler{
     /*