diff options
Diffstat (limited to 'rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java')
-rw-r--r-- | rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java | 51 |
1 files changed, 49 insertions, 2 deletions
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 b41baa7..6b58073 100644 --- a/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java +++ b/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java @@ -33,12 +33,18 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.database.ContentObserver; +import android.net.Uri; +import android.provider.Telephony; import android.telephony.CarrierConfigManager; import android.os.IBinder; import android.os.PersistableBundle; import android.os.ServiceManager; import android.os.SystemProperties; import android.telephony.SubscriptionManager; +import android.telephony.ims.ImsManager; +import android.telephony.ims.ImsRcsManager; +import android.util.Log; import com.android.ims.internal.Logger; import com.android.internal.annotations.VisibleForTesting; @@ -49,6 +55,9 @@ import com.android.internal.annotations.VisibleForTesting; */ public class PollingService extends Service { + private static final Uri UCE_URI = Uri.withAppendedPath(Telephony.SimInfo.CONTENT_URI, + Telephony.SimInfo.IMS_RCS_UCE_ENABLED); + private Logger logger = Logger.getLogger(this.getClass().getName()); private CapabilityPolling mCapabilityPolling = null; @@ -71,6 +80,8 @@ public class PollingService extends Service { } }; + private ContentObserver mUceSettingObserver; + private SubscriptionManager.OnSubscriptionsChangedListener mSubChangedListener = new SubscriptionManager.OnSubscriptionsChangedListener() { @Override @@ -97,6 +108,20 @@ public class PollingService extends Service { // start polling. subscriptionManager.addOnSubscriptionsChangedListener(getMainExecutor(), mSubChangedListener); + mUceSettingObserver = new ContentObserver(getMainThreadHandler()) { + @Override + public void onChange(boolean selfChange) { + onChange(selfChange, null /*uri*/); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + logger.print("UCE setting changed, re-evaluating poll service."); + checkAndUpdateCapabilityPollStatus(); + } + }; + getContentResolver().registerContentObserver(UCE_URI, true /*notifyForDescendants*/, + mUceSettingObserver); } /** @@ -113,6 +138,9 @@ public class PollingService extends Service { SubscriptionManager subscriptionManager = getSystemService(SubscriptionManager.class); subscriptionManager.removeOnSubscriptionsChangedListener(mSubChangedListener); unregisterReceiver(mReceiver); + if (mUceSettingObserver != null) { + getContentResolver().unregisterContentObserver(mUceSettingObserver); + } super.onDestroy(); } @@ -164,8 +192,12 @@ public class PollingService extends Service { private void checkAndUpdateCapabilityPollStatus() { // If the carrier doesn't support RCS Presence, stop polling. - if (!isRcsSupportedByCarrier()) { - logger.info("RCS not supported by carrier. Stopping CapabilityPolling"); + boolean carrierSupport = isRcsSupportedByCarrier(); + boolean userEnabled = hasUserEnabledUce(); + logger.print("RCS carrier support = " + carrierSupport + ", user enabled = " + + userEnabled); + if (!carrierSupport || !userEnabled) { + logger.print("RCS UCE Not supported, Stopping CapabilityPolling"); if (mCapabilityPolling != null) { mCapabilityPolling.stop(); mCapabilityPolling = null; @@ -180,6 +212,21 @@ public class PollingService extends Service { } } + private boolean hasUserEnabledUce() { + ImsManager manager = getSystemService(ImsManager.class); + if (manager == null) { + logger.error("hasUserEnabledUce: manager not available."); + return false; + } + try { + ImsRcsManager rcsManager = manager.getImsRcsManager(mDefaultSubId); + return (rcsManager != null) && rcsManager.getUceAdapter().isUceSettingEnabled(); + } catch (Exception e) { + logger.error("hasUserEnabledUce: exception = " + e.getMessage()); + } + return false; + } + private boolean isRcsSupportedByCarrier() { CarrierConfigManager configManager = getSystemService(CarrierConfigManager.class); if (configManager != null) { |