summaryrefslogtreecommitdiff
path: root/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java
diff options
context:
space:
mode:
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.java51
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) {