summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Ebinger <breadley@google.com>2020-01-15 14:16:38 -0800
committerBrad Ebinger <breadley@google.com>2020-01-15 22:33:24 +0000
commit442da1408505ff574cdf2c8a6491ae1c6311d4a3 (patch)
treec4dc5be54df569848ae4bd836009ed29dd636fc3
parent63e639314b3b7c3d7a5c5e9c8cf106257beb72b9 (diff)
downloadims-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
-rw-r--r--rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java53
-rw-r--r--rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java73
-rw-r--r--rcs/rcsservice/src/com/android/service/ims/presence/PresencePublisher.java4
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.