summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Ebinger <breadley@google.com>2017-04-06 00:31:10 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-04-06 00:31:10 +0000
commit743d661b6641fac603dd88fb6c7d487fcbc902bb (patch)
treea45a715fe1ee1dfb4a6edb93d95b146c2cae9a6e
parent24c2d001dcf56d035bf3849c160f0bbd08668ccc (diff)
parenta311636ad17b3ffccc9908a173cfb45b32d8bf6b (diff)
downloadims-743d661b6641fac603dd88fb6c7d487fcbc902bb.tar.gz
Listen to ACTION_CARRIER_CONFIG_CHANGED to start Polling
am: a311636ad1 Change-Id: I0678e99b225ea3dc41daade324d382541610a25d
-rw-r--r--rcs/presencepolling/src/com/android/service/ims/presence/DeviceBoot.java3
-rw-r--r--rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java79
-rw-r--r--rcs/presencepolling/src/com/android/service/ims/presence/PollingsQueue.java2
3 files changed, 50 insertions, 34 deletions
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 @@ public class DeviceBoot extends BroadcastReceiver {
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 class PollingService extends Service {
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 @@ public class PollingService extends Service {
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 @@ public class PollingService extends Service {
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 @@ public class PollingsQueue {
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);