diff options
author | Brad Ebinger <breadley@google.com> | 2020-01-15 14:16:38 -0800 |
---|---|---|
committer | Brad Ebinger <breadley@google.com> | 2020-01-15 22:33:24 +0000 |
commit | 442da1408505ff574cdf2c8a6491ae1c6311d4a3 (patch) | |
tree | c4dc5be54df569848ae4bd836009ed29dd636fc3 | |
parent | 63e639314b3b7c3d7a5c5e9c8cf106257beb72b9 (diff) | |
download | ims-442da1408505ff574cdf2c8a6491ae1c6311d4a3.tar.gz |
Remove remaining TaskManager dependencies from RcsStackAdaptor
PresencePublication should be using TaskManager to manage existing
presence tasks, not RcsStackAdaptor so other usages of the lib
do not need to also perform this management.
Test: manual; verify presence publication still works
Change-Id: Iaf7d4b07b49da97d96739d4c33eec6850a9bce18
3 files changed, 74 insertions, 56 deletions
diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java b/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java index 1af5caa..d864701 100644 --- a/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java +++ b/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java @@ -45,11 +45,9 @@ import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.ims.RcsContactUceCapability; -import android.text.TextUtils; import com.android.ims.ResultCode; import com.android.ims.RcsPresence; -import com.android.ims.internal.ContactNumberUtils; import com.android.ims.internal.Logger; import com.android.ims.internal.uce.common.CapInfo; import com.android.ims.internal.uce.common.StatusCode; @@ -358,7 +356,7 @@ public class RcsStackAdaptor implements PresencePublisher, SubscribePublisher { } @Override - public int requestPublication(RcsContactUceCapability capabilities) { + public int requestPublication(RcsContactUceCapability capabilities, String myUri, int taskId) { logger.debug("requestPublication ..."); // Don't use checkStackAndPublish() @@ -368,55 +366,14 @@ public class RcsStackAdaptor implements PresencePublisher, SubscribePublisher { logger.error("requestPublication ret=" + ret); return ret; } - - TelephonyManager teleMgr = (TelephonyManager) mContext.getSystemService( - Context.TELEPHONY_SERVICE); - if (teleMgr == null) { - logger.error("teleMgr = null"); - return ResultCode.PUBLISH_GENERIC_FAILURE; - } - teleMgr = teleMgr.createForSubscriptionId(mAssociatedSubscription); - - String myNumUri = null; - String myDomain = teleMgr.getIsimDomain(); - logger.debug("myDomain=" + myDomain); - if (myDomain != null && !TextUtils.isEmpty(myDomain)) { - String[] impu = teleMgr.getIsimImpu(); - - 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]; - break; - } - } - } - } - - String myNumber = PresenceInfoParser.getPhoneFromUri(myNumUri); - - if (myNumber == null) { - myNumber = ContactNumberUtils.getDefault().format(teleMgr.getLine1Number()); - if (myDomain != null && !TextUtils.isEmpty(myDomain)) { - myNumUri = "sip:" + myNumber + "@" + myDomain; - } else { - myNumUri = "tel:" + myNumber; - } - } - - logger.print("myNumUri=" + myNumUri + " myNumber=" + myNumber); - if (myNumUri == null || myNumber == null) { + if (myUri == null) { logger.error("Didn't find number or impu."); return ResultCode.PUBLISH_GENERIC_FAILURE; } - - int taskId = TaskManager.getDefault().addPublishTask(myNumber); try { PresCapInfo pMyCapInfo = new PresCapInfo(); // Fill cap info - pMyCapInfo.setContactUri(myNumUri); + pMyCapInfo.setContactUri(myUri); CapInfo capInfo = new CapInfo(); capInfo.setIpVoiceSupported(capabilities.isCapable( @@ -431,7 +388,7 @@ public class RcsStackAdaptor implements PresencePublisher, SubscribePublisher { pMyCapInfo.setCapInfo(capInfo); - logger.print( "myNumUri = " + myNumUri + logger.print( "myNumUri = " + myUri + " audioSupported = " + capInfo.isIpVoiceSupported() + " videoSupported= " + capInfo.isIpVideoSupported() ); @@ -447,14 +404,12 @@ public class RcsStackAdaptor implements PresencePublisher, SubscribePublisher { logger.debug("requestPublication ret=" + ret); if (ret != ResultCode.SUCCESS) { logger.error("requestPublication remove taskId=" + taskId); - TaskManager.getDefault().removeTask(taskId); return ret; } } catch (RemoteException e) { e.printStackTrace(); logger.error("Exception when call mStackPresService.getContactCap"); logger.error("requestPublication remove taskId=" + taskId); - TaskManager.getDefault().removeTask(taskId); return ResultCode.ERROR_SERVICE_NOT_AVAILABLE; } 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 829403f..cdf151a 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java @@ -49,6 +49,7 @@ import android.telephony.ims.feature.MmTelFeature; import android.text.TextUtils; import com.android.ims.ResultCode; +import com.android.ims.internal.ContactNumberUtils; import com.android.ims.internal.Logger; import com.android.service.ims.RcsSettingUtils; import com.android.service.ims.Task; @@ -880,13 +881,73 @@ public class PresencePublication extends PresenceBase { mPublishingRequest.setTimestamp(System.currentTimeMillis()); } - int ret = mPresencePublisher.requestPublication(presenceInfoBuilder.build()); - if (ret == ResultCode.ERROR_SERVICE_NOT_AVAILABLE) { - mHasCachedTrigger = true; - } else { - //reset the cached trigger - mHasCachedTrigger = false; + 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 = mPresencePublisher.requestPublication(presenceInfoBuilder.build(), myUri, taskId); + if (ret != ResultCode.SUCCESS) { + logger.print("doPublish, task=" + taskId + " failed with code=" + ret); + TaskManager.getDefault().removeTask(taskId); + } + // cache the latest publication request if temporarily not available. + mHasCachedTrigger = (ret == ResultCode.ERROR_SERVICE_NOT_AVAILABLE); + } + + private String getNumberFromUri(String uriString) { + String number = Uri.parse(uriString).getSchemeSpecificPart(); + String[] numberParts = number.split("[@;:]"); + + if (numberParts.length == 0) { + logger.error("getNumberFromUri: invalid uri=" + uriString); + return null; + } + return numberParts[0]; + } + + private String getUriForPublication() { + TelephonyManager teleMgr = (TelephonyManager) mContext.getSystemService( + Context.TELEPHONY_SERVICE); + if (teleMgr == null) { + logger.error("getUriForPublication, teleMgr = null"); + return null; + } + teleMgr = teleMgr.createForSubscriptionId(mAssociatedSubscription); + + String myNumUri = null; + String myDomain = teleMgr.getIsimDomain(); + logger.debug("myDomain=" + myDomain); + if (myDomain != null && !TextUtils.isEmpty(myDomain)) { + String[] impu = teleMgr.getIsimImpu(); + + 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]; + break; + } + } + } + } + String myNumber = null; + if (myNumUri != null) { + myNumber = Uri.parse(myNumUri).getSchemeSpecificPart(); + } + + if (myNumber == null) { + myNumber = ContactNumberUtils.getDefault().format(teleMgr.getLine1Number()); + if (myDomain != null && !TextUtils.isEmpty(myDomain)) { + myNumUri = "sip:" + myNumber + "@" + myDomain; + } else { + myNumUri = "tel:" + myNumber; + } } + return myNumUri; } private PendingIntent mRetryAlarmIntent = null; diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublisher.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublisher.java index 4b6eb89..baaf1b1 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublisher.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublisher.java @@ -40,9 +40,11 @@ public interface PresencePublisher { /** * Request that the specified capabilities are published to the network. * @param capabilities The capabilities to publish. + * @param contactUri The contactUri that will be used to publish capabilities. + * @param taskId The presence task associated with this request. * @return the result of requesting that the capabilities are published. */ - int requestPublication(RcsContactUceCapability capabilities); + int requestPublication(RcsContactUceCapability capabilities, String contactUri, int taskId); /** * Notify the stack of the last publish or subscribe request result. |