diff options
author | Brad Ebinger <breadley@google.com> | 2017-04-06 00:31:10 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-04-06 00:31:10 +0000 |
commit | 743d661b6641fac603dd88fb6c7d487fcbc902bb (patch) | |
tree | a45a715fe1ee1dfb4a6edb93d95b146c2cae9a6e | |
parent | 24c2d001dcf56d035bf3849c160f0bbd08668ccc (diff) | |
parent | a311636ad17b3ffccc9908a173cfb45b32d8bf6b (diff) | |
download | ims-743d661b6641fac603dd88fb6c7d487fcbc902bb.tar.gz |
Listen to ACTION_CARRIER_CONFIG_CHANGED to start Polling
am: a311636ad1
Change-Id: I0678e99b225ea3dc41daade324d382541610a25d
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); |