diff options
author | Brad Ebinger <breadley@google.com> | 2020-05-13 17:46:40 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-05-13 17:46:40 +0000 |
commit | 64303b1fde0bcb5ad9d71043955445c03ccadd1e (patch) | |
tree | 01163cfa57611a7a68e07d464ee0f5a5ab4d4b99 | |
parent | 8b51f02231ca35b21264c679582a34ef3b754e5a (diff) | |
parent | 1b57b5a942785afd268ef33fc4763849e0387beb (diff) | |
download | ims-android11-mainline-captiveportallogin-release.tar.gz |
Consolidate contact URI info during Publish am: 1b57b5a942android-mainline-11.0.0_r44android-mainline-11.0.0_r43android-mainline-11.0.0_r42android-mainline-11.0.0_r41android-mainline-11.0.0_r40android-mainline-11.0.0_r39android-mainline-11.0.0_r38android-mainline-11.0.0_r37android-mainline-11.0.0_r36android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r28android-mainline-11.0.0_r27android-mainline-11.0.0_r26android-mainline-11.0.0_r25android-mainline-11.0.0_r24android-mainline-11.0.0_r23android-mainline-11.0.0_r22android-mainline-11.0.0_r21android-mainline-11.0.0_r20android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12android11-mainline-tethering-releaseandroid11-mainline-permission-releaseandroid11-mainline-os-statsd-releaseandroid11-mainline-networkstack-releaseandroid11-mainline-media-swcodec-releaseandroid11-mainline-media-releaseandroid11-mainline-extservices-releaseandroid11-mainline-documentsui-releaseandroid11-mainline-conscrypt-releaseandroid11-mainline-cellbroadcast-releaseandroid11-mainline-captiveportallogin-release
Change-Id: I26b9c56f6c434d4dde21d6c8236ea8aaa13d7fb9
-rw-r--r-- | rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java | 71 |
1 files changed, 40 insertions, 31 deletions
diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java index 19a802f..0b6b2ea 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java @@ -65,6 +65,10 @@ public class PresencePublication extends PresenceBase { private static final int TIMEOUT_CHECK_SUBSCRIPTION_READY_MS = 5000; + private static final String SIP_SCHEME = "sip"; + private static final String TEL_SCHEME = "tel"; + private static final String DOMAIN_SEPARATOR = "@"; + boolean mMovedToIWLAN = false; boolean mMovedToLTE = false; boolean mVoPSEnabled = false; @@ -896,10 +900,14 @@ public class PresencePublication extends PresenceBase { logger.error("TelephonyManager not available."); return; } - Uri contactUri = Uri.fromParts(PhoneAccount.SCHEME_TEL, teleMgr.getLine1Number(), null); + Uri myUri = getUriForPublication(); + if (myUri == null) { + logger.error("doPublish, myUri is null"); + return; + } RcsContactUceCapability.Builder presenceInfoBuilder = - new RcsContactUceCapability.Builder(contactUri); + new RcsContactUceCapability.Builder(myUri); if (publishRequest.getVolteCapable()) { presenceInfoBuilder.add(RcsContactUceCapability.CAPABILITY_IP_VOICE_CALL); } @@ -912,15 +920,11 @@ public class PresencePublication extends PresenceBase { mPublishingRequest.setTimestamp(System.currentTimeMillis()); } - String myUri = getUriForPublication(); - if (myUri == null) { - logger.error("doPublish, myUri is null"); - } String myNumber = getNumberFromUri(myUri); int taskId = TaskManager.getDefault().addPublishTask(myNumber); logger.print("doPublish, uri=" + myUri + ", myNumber=" + myNumber + ", taskId=" + taskId); - - int ret = presencePublisher.requestPublication(presenceInfoBuilder.build(), myUri, taskId); + int ret = presencePublisher.requestPublication(presenceInfoBuilder.build(), + myUri.toString(), taskId); if (ret != ResultCode.SUCCESS) { logger.print("doPublish, task=" + taskId + " failed with code=" + ret); TaskManager.getDefault().removeTask(taskId); @@ -929,18 +933,19 @@ public class PresencePublication extends PresenceBase { mHasCachedTrigger = (ret == ResultCode.ERROR_SERVICE_NOT_AVAILABLE); } - private String getNumberFromUri(String uriString) { - String number = Uri.parse(uriString).getSchemeSpecificPart(); + private String getNumberFromUri(Uri uri) { + if (uri == null) return null; + String number = uri.getSchemeSpecificPart(); String[] numberParts = number.split("[@;:]"); if (numberParts.length == 0) { - logger.error("getNumberFromUri: invalid uri=" + uriString); + logger.error("getNumberFromUri: invalid uri=" + uri); return null; } return numberParts[0]; } - private String getUriForPublication() { + private Uri getUriForPublication() { TelephonyManager teleMgr = (TelephonyManager) mContext.getSystemService( Context.TELEPHONY_SERVICE); if (teleMgr == null) { @@ -949,37 +954,41 @@ public class PresencePublication extends PresenceBase { } teleMgr = teleMgr.createForSubscriptionId(mAssociatedSubscription); - String myNumUri = null; + Uri myNumUri = null; String myDomain = teleMgr.getIsimDomain(); logger.debug("myDomain=" + myDomain); - if (myDomain != null && !TextUtils.isEmpty(myDomain)) { + if (!TextUtils.isEmpty(myDomain)) { String[] impu = teleMgr.getIsimImpu(); - - if(impu !=null){ - for(int i=0; i<impu.length; i++){ + if (impu != null) { + for (int i = 0; i < impu.length; i++) { logger.debug("impu[" + i + "]=" + impu[i]); - if(impu[i] != null && impu[i].startsWith("sip:") && - impu[i].endsWith(myDomain)){ - myNumUri = impu[i]; + if (!TextUtils.isEmpty(impu[i])) { + Uri impuUri = Uri.parse(impu[i]); + if (SIP_SCHEME.equals(impuUri.getScheme()) && + impuUri.getSchemeSpecificPart().endsWith(myDomain)) { + myNumUri = impuUri; + logger.debug("impu[" + i + "] -> uri:" + myNumUri); + } break; } } } } - String myNumber = null; - if (myNumUri != null) { - myNumber = Uri.parse(myNumUri).getSchemeSpecificPart(); + + // Try to parse URI, if it works, we are good! + String myNumber = myNumUri == null ? null : myNumUri.getSchemeSpecificPart(); + if (!TextUtils.isEmpty(myNumber)) { + return myNumUri; } - if (myNumber == null) { - myNumber = ContactNumberUtils.getDefault().format(teleMgr.getLine1Number()); - if (myDomain != null && !TextUtils.isEmpty(myDomain)) { - myNumUri = "sip:" + myNumber + "@" + myDomain; - } else { - myNumUri = "tel:" + myNumber; - } + // Fall back to trying to use the line 1 number to construct URI + myNumber = ContactNumberUtils.getDefault().format(teleMgr.getLine1Number()); + if (myNumber == null) return null; + if (!TextUtils.isEmpty(myDomain)) { + return Uri.fromParts(SIP_SCHEME, myNumber + DOMAIN_SEPARATOR + myDomain, null); + } else { + return Uri.fromParts(TEL_SCHEME, myNumber, null); } - return myNumUri; } private PendingIntent mRetryAlarmIntent = null; |