Update ImsConnectionStateListener
am: f70d0e1d44  -s ours

Change-Id: Iee06aa6eba42202615142d8f7cb48dcb34fc3c80
diff --git a/rcs/presencepolling/src/com/android/service/ims/presence/DeviceBoot.java b/rcs/presencepolling/src/com/android/service/ims/presence/DeviceBoot.java
index ecab2e1..4c6eed0 100644
--- a/rcs/presencepolling/src/com/android/service/ims/presence/DeviceBoot.java
+++ b/rcs/presencepolling/src/com/android/service/ims/presence/DeviceBoot.java
@@ -53,7 +53,8 @@
         logger.debug("onReceive() in PresencePolling, intent: " +
                 intent + ", context: " + context);
 
-        if (!PollingService.isRcsSupported(context)) {
+        // Don't initialize structures if the device does not support RCS at all.
+        if (!PollingService.isRcsSupportedByDevice()) {
             return;
         }
 
diff --git a/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java b/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java
index 7977d2e..256f6af 100644
--- a/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java
+++ b/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java
@@ -29,26 +29,41 @@
 package com.android.service.ims.presence;
 
 import android.app.Service;
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.telephony.CarrierConfigManager;
-import android.os.Handler;
 import android.os.IBinder;
 import android.os.PersistableBundle;
-import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemProperties;
 
 import com.android.ims.internal.Logger;
 
+/**
+ * Manages the CapabilityPolling class. Starts capability polling when a SIM card is inserted that
+ * supports RCS Presence Capability Polling and stops the service otherwise.
+ */
 public class PollingService extends Service {
-    /**
-     * The logger
-     */
+
     private Logger logger = Logger.getLogger(this.getClass().getName());
 
     private CapabilityPolling mCapabilityPolling = null;
 
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            switch (intent.getAction()) {
+                case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: {
+                    checkAndUpdateCapabilityPollStatus();
+                    break;
+                }
+            }
+        }
+    };
+
     /**
      * Constructor
      */
@@ -60,23 +75,9 @@
     public void onCreate() {
         logger.debug("onCreate()");
 
-        if (isEabSupported(this)) {
-            mCapabilityPolling = CapabilityPolling.getInstance(this);
-            mCapabilityPolling.start();
-        }
-    }
-
-    @Override
-    public int onStartCommand(Intent intent, int flags, int startId) {
-        logger.debug("onStartCommand(), intent: " + intent +
-                ", flags: " + flags + ", startId: " + startId);
-
-        if (!isRcsSupported(this)) {
-            stopSelf();
-            return START_NOT_STICKY;
-        }
-
-        return super.onStartCommand(intent, flags, startId);
+        registerBroadcastReceiver();
+        // Check when the service starts in case the SIM info has already been loaded.
+        checkAndUpdateCapabilityPollStatus();
     }
 
     /**
@@ -106,12 +107,31 @@
         return null;
     }
 
-    static boolean isRcsSupported(Context context) {
-        return isRcsSupportedByDevice() && isRcsSupportedByCarrier(context);
+    private void registerBroadcastReceiver() {
+        IntentFilter filter = new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
+        registerReceiver(mReceiver, filter);
     }
 
-    private static boolean isEabSupported(Context context) {
-        return isEabSupportedByDevice() && isRcsSupportedByCarrier(context);
+    private void checkAndUpdateCapabilityPollStatus() {
+        // If the carrier doesn't support RCS Presence, stop polling.
+        if (!isRcsSupportedByCarrier(this)) {
+            logger.info("RCS not supported by carrier. Stopping CapabilityPolling");
+            if (mCapabilityPolling != null) {
+                mCapabilityPolling.stop();
+                mCapabilityPolling = null;
+            }
+            return;
+        }
+        // Carrier supports, so start the service if it hasn't already been started.
+        if (mCapabilityPolling == null) {
+            logger.info("Starting CapabilityPolling...");
+            mCapabilityPolling = CapabilityPolling.getInstance(this);
+            mCapabilityPolling.start();
+        }
+    }
+
+    static boolean isRcsSupported(Context context) {
+        return isRcsSupportedByDevice() && isRcsSupportedByCarrier(context);
     }
 
     private static boolean isRcsSupportedByCarrier(Context context) {
@@ -125,13 +145,8 @@
         return true;
     }
 
-    private static boolean isRcsSupportedByDevice() {
+    public static boolean isRcsSupportedByDevice() {
         String rcsSupported = SystemProperties.get("persist.rcs.supported");
         return "1".equals(rcsSupported);
     }
-
-    private static boolean isEabSupportedByDevice() {
-        String eabSupported = SystemProperties.get("persist.eab.supported");
-        return ("0".equals(eabSupported)) ? false : true;
-    }
 }
diff --git a/rcs/presencepolling/src/com/android/service/ims/presence/PollingsQueue.java b/rcs/presencepolling/src/com/android/service/ims/presence/PollingsQueue.java
index b833de7..4b75ae3 100644
--- a/rcs/presencepolling/src/com/android/service/ims/presence/PollingsQueue.java
+++ b/rcs/presencepolling/src/com/android/service/ims/presence/PollingsQueue.java
@@ -190,7 +190,7 @@
             return;
         }
 
-        logger.print("Remove polling task: " + task);
+        logger.debug("Remove polling task: " + task);
         if (task != null) {
             for (int i = 0; i < nTasks; i++) {
                 PollingTask task0 = mPollingTasks.get(i);
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 5abc19f..e23ec09 100644
--- a/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java
+++ b/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java
@@ -530,6 +530,10 @@
                 }
             }
         }
+
+        public void unpublishMessageSent() {
+            logger.debug("unpublishMessageSent()");
+        }
     };
 }