summaryrefslogtreecommitdiff
path: root/rcs
diff options
context:
space:
mode:
authorJames Lin <jamescflin@google.com>2020-10-16 01:15:28 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-10-16 01:15:28 +0000
commit4695ee64c628b140c8725c330fa6da32f72755c1 (patch)
tree35d6607dcf1ca7bbe46458219c9fb2fb9b01dd12 /rcs
parent633ecaa4a970f21bb915b33cafed672dbae60ad0 (diff)
parente461673121f764721a96d0b9d24b7c566f74bcd4 (diff)
downloadims-4695ee64c628b140c8725c330fa6da32f72755c1.tar.gz
Merge "[RCS UCE] Update the way to get feature capable from RcsContactUceCapability"
Diffstat (limited to 'rcs')
-rw-r--r--rcs/rcsservice/src/com/android/service/ims/PresenceInfoParser.java58
-rw-r--r--rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java32
-rw-r--r--rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java39
-rw-r--r--rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java20
4 files changed, 114 insertions, 35 deletions
diff --git a/rcs/rcsservice/src/com/android/service/ims/PresenceInfoParser.java b/rcs/rcsservice/src/com/android/service/ims/PresenceInfoParser.java
index 5edb9a1..5daa051 100644
--- a/rcs/rcsservice/src/com/android/service/ims/PresenceInfoParser.java
+++ b/rcs/rcsservice/src/com/android/service/ims/PresenceInfoParser.java
@@ -29,7 +29,10 @@
package com.android.service.ims;
import android.net.Uri;
+import android.telephony.ims.RcsContactPresenceTuple;
+import android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities;
import android.telephony.ims.RcsContactUceCapability;
+import android.telephony.ims.RcsContactUceCapability.PresenceBuilder;
import java.lang.String;
import java.util.ArrayList;
@@ -274,36 +277,57 @@ public class PresenceInfoParser{
}
public static RcsContactUceCapability getUceCapability(RcsPresenceInfo info) {
- RcsContactUceCapability.Builder result = new RcsContactUceCapability.Builder(
- PresenceUtils.convertContactNumber(info.getContactNumber()));
+ boolean volteCapable = false;
if (ServiceState.ONLINE == info.getServiceState(ServiceType.VOLTE_CALL)) {
- result.add(RcsContactUceCapability.CAPABILITY_IP_VOICE_CALL,
- PresenceUtils.convertContactNumber(
- info.getServiceContact(ServiceType.VOLTE_CALL)));
+ volteCapable = true;
}
+
+ boolean vtCapable = false;
if (ServiceState.ONLINE == info.getServiceState(ServiceType.VT_CALL)) {
- result.add(RcsContactUceCapability.CAPABILITY_IP_VIDEO_CALL,
- PresenceUtils.convertContactNumber(
- info.getServiceContact(ServiceType.VT_CALL)));
+ vtCapable = true;
}
- return result.build();
+
+ ServiceCapabilities.Builder servCapsBuilder = new ServiceCapabilities.Builder(
+ volteCapable, vtCapable);
+ servCapsBuilder.addSupportedDuplexMode(ServiceCapabilities.DUPLEX_MODE_FULL);
+
+ Uri contactUri = PresenceUtils.convertContactNumber(info.getContactNumber());
+
+ RcsContactPresenceTuple.Builder tupleBuilder = new RcsContactPresenceTuple.Builder(
+ RcsContactPresenceTuple.TUPLE_BASIC_STATUS_OPEN,
+ RcsContactPresenceTuple.SERVICE_ID_MMTEL, "1.0");
+ tupleBuilder.addContactUri(contactUri).addServiceCapabilities(servCapsBuilder.build());
+
+ PresenceBuilder presenceBuilder = new PresenceBuilder(contactUri,
+ RcsContactUceCapability.SOURCE_TYPE_CACHED,
+ RcsContactUceCapability.REQUEST_RESULT_FOUND);
+ presenceBuilder.addCapabilityTuple(tupleBuilder.build());
+
+ return presenceBuilder.build();
}
public static RcsPresenceInfo getRcsPresenceInfo(RcsContactUceCapability capability) {
- int volteCapable = capability.isCapable(RcsContactUceCapability.CAPABILITY_IP_VOICE_CALL) ?
- ServiceState.ONLINE : ServiceState.OFFLINE;
- int vtCapable = capability.isCapable(RcsContactUceCapability.CAPABILITY_IP_VIDEO_CALL) ?
- ServiceState.ONLINE : ServiceState.OFFLINE;
+ int volteCapable = ServiceState.OFFLINE;
+ int vtCapable = ServiceState.OFFLINE;
+ RcsContactPresenceTuple presenceTuple = capability.getPresenceTuple(
+ RcsContactPresenceTuple.SERVICE_ID_MMTEL);
+ if (presenceTuple != null) {
+ ServiceCapabilities serviceCaps = presenceTuple.getServiceCapabilities();
+ if (serviceCaps != null && serviceCaps.isAudioCapable()) {
+ volteCapable = ServiceState.ONLINE;
+ }
+ if (serviceCaps != null && serviceCaps.isVideoCapable()) {
+ vtCapable = ServiceState.ONLINE;
+ }
+ }
return new RcsPresenceInfo(capability.getContactUri().getSchemeSpecificPart(),
// Not sure what the difference is, just track voice capable.
(volteCapable == ServiceState.ONLINE) ? RcsPresenceInfo.VolteStatus.VOLTE_ENABLED :
RcsPresenceInfo.VolteStatus.VOLTE_DISABLED, volteCapable,
- PresenceUtils.getNumber(capability.getServiceUri(
- RcsContactUceCapability.CAPABILITY_IP_VOICE_CALL)),
+ PresenceUtils.getNumber(capability.getContactUri()),
// We always use system current time instead of time from server
System.currentTimeMillis(), vtCapable,
- PresenceUtils.getNumber(capability.getServiceUri(
- RcsContactUceCapability.CAPABILITY_IP_VIDEO_CALL)),
+ PresenceUtils.getNumber(capability.getContactUri()),
// We always use system current time instead of time from server
System.currentTimeMillis());
}
diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java b/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java
index d864701..19ea492 100644
--- a/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java
+++ b/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java
@@ -44,6 +44,8 @@ import android.os.SystemClock;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.telephony.ims.RcsContactPresenceTuple;
+import android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities;
import android.telephony.ims.RcsContactUceCapability;
import com.android.ims.ResultCode;
@@ -376,10 +378,8 @@ public class RcsStackAdaptor implements PresencePublisher, SubscribePublisher {
pMyCapInfo.setContactUri(myUri);
CapInfo capInfo = new CapInfo();
- capInfo.setIpVoiceSupported(capabilities.isCapable(
- RcsContactUceCapability.CAPABILITY_IP_VOICE_CALL));
- capInfo.setIpVideoSupported(capabilities.isCapable(
- RcsContactUceCapability.CAPABILITY_IP_VIDEO_CALL));
+ capInfo.setIpVoiceSupported(isVolteSupported(capabilities));
+ capInfo.setIpVideoSupported(isVtSupported(capabilities));
capInfo.setCdViaPresenceSupported(true);
capInfo.setFtSupported(false); // TODO: support FT
@@ -417,6 +417,30 @@ public class RcsStackAdaptor implements PresencePublisher, SubscribePublisher {
return ResultCode.SUCCESS;
}
+ private boolean isVolteSupported(RcsContactUceCapability capabilities) {
+ RcsContactPresenceTuple presenceTuple = capabilities.getPresenceTuple(
+ RcsContactPresenceTuple.SERVICE_ID_MMTEL);
+ if (presenceTuple != null) {
+ ServiceCapabilities serviceCaps = presenceTuple.getServiceCapabilities();
+ if (serviceCaps != null && serviceCaps.isAudioCapable()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isVtSupported(RcsContactUceCapability capabilities) {
+ RcsContactPresenceTuple presenceTuple = capabilities.getPresenceTuple(
+ RcsContactPresenceTuple.SERVICE_ID_MMTEL);
+ if (presenceTuple != null) {
+ ServiceCapabilities serviceCaps = presenceTuple.getServiceCapabilities();
+ if (serviceCaps != null && serviceCaps.isVideoCapable()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private void launchPersistService(Intent intent) {
ComponentName component = new ComponentName(PERSIST_SERVICE_PACKAGE,
PERSIST_SERVICE_NAME);
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 0b6b2ea..dd9684d 100644
--- a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java
+++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java
@@ -44,7 +44,10 @@ import android.telecom.TelecomManager;
import android.telephony.AccessNetworkConstants;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.telephony.ims.RcsContactPresenceTuple;
+import android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities;
import android.telephony.ims.RcsContactUceCapability;
+import android.telephony.ims.RcsContactUceCapability.PresenceBuilder;
import android.telephony.ims.feature.MmTelFeature;
import android.text.TextUtils;
@@ -906,14 +909,10 @@ public class PresencePublication extends PresenceBase {
return;
}
- RcsContactUceCapability.Builder presenceInfoBuilder =
- new RcsContactUceCapability.Builder(myUri);
- if (publishRequest.getVolteCapable()) {
- presenceInfoBuilder.add(RcsContactUceCapability.CAPABILITY_IP_VOICE_CALL);
- }
- if (publishRequest.getVtCapable()) {
- presenceInfoBuilder.add(RcsContactUceCapability.CAPABILITY_IP_VIDEO_CALL);
- }
+ boolean isVolteCapble = publishRequest.getVolteCapable();
+ boolean isVtCapable = publishRequest.getVtCapable();
+ RcsContactUceCapability presenceInfo =
+ getRcsContactUceCapability(myUri, isVolteCapble, isVtCapable);
synchronized(mSyncObj) {
mPublishingRequest = publishRequest;
@@ -923,8 +922,7 @@ public class PresencePublication extends PresenceBase {
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.toString(), taskId);
+ int ret = presencePublisher.requestPublication(presenceInfo, myUri.toString(), taskId);
if (ret != ResultCode.SUCCESS) {
logger.print("doPublish, task=" + taskId + " failed with code=" + ret);
TaskManager.getDefault().removeTask(taskId);
@@ -933,6 +931,27 @@ public class PresencePublication extends PresenceBase {
mHasCachedTrigger = (ret == ResultCode.ERROR_SERVICE_NOT_AVAILABLE);
}
+ private RcsContactUceCapability getRcsContactUceCapability(Uri contact, boolean isVolteCapable,
+ boolean isVtCapable) {
+
+ ServiceCapabilities.Builder servCapsBuilder = new ServiceCapabilities.Builder(
+ isVolteCapable, isVtCapable);
+ servCapsBuilder.addSupportedDuplexMode(ServiceCapabilities.DUPLEX_MODE_FULL);
+
+ RcsContactPresenceTuple.Builder tupleBuilder = new RcsContactPresenceTuple.Builder(
+ RcsContactPresenceTuple.TUPLE_BASIC_STATUS_OPEN,
+ RcsContactPresenceTuple.SERVICE_ID_MMTEL, "1.0");
+ tupleBuilder.addContactUri(contact)
+ .addServiceCapabilities(servCapsBuilder.build());
+
+ PresenceBuilder presenceBuilder = new PresenceBuilder(contact,
+ RcsContactUceCapability.SOURCE_TYPE_CACHED,
+ RcsContactUceCapability.REQUEST_RESULT_FOUND);
+ presenceBuilder.addCapabilityTuple(tupleBuilder.build());
+
+ return presenceBuilder.build();
+ }
+
private String getNumberFromUri(Uri uri) {
if (uri == null) return null;
String number = uri.getSchemeSpecificPart();
diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java
index c804675..fb2b57e 100644
--- a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java
+++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java
@@ -29,9 +29,11 @@
package com.android.service.ims.presence;
import android.content.Context;
+import android.net.Uri;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.RcsContactUceCapability;
+import android.telephony.ims.RcsContactUceCapability.PresenceBuilder;
import android.text.TextUtils;
import com.android.ims.ResultCode;
@@ -449,8 +451,8 @@ public class PresenceSubscriber extends PresenceBase {
}
logger.debug("onSipResponse: contact= " + contacts[i] + ", not found.");
// Build contacts with no capabilities.
- contactCapabilities.add(new RcsContactUceCapability.Builder(
- PresenceUtils.convertContactNumber(contacts[i])).build());
+ contactCapabilities.add(buildContactWithNoCapabilities(
+ PresenceUtils.convertContactNumber(contacts[i])));
}
handleCapabilityUpdate(task, contactCapabilities, true);
@@ -461,6 +463,13 @@ public class PresenceSubscriber extends PresenceBase {
handleCallback(task, errorCode, false);
}
+ private RcsContactUceCapability buildContactWithNoCapabilities(Uri contactUri) {
+ PresenceBuilder presenceBuilder = new PresenceBuilder(contactUri,
+ RcsContactUceCapability.SOURCE_TYPE_CACHED,
+ RcsContactUceCapability.REQUEST_RESULT_FOUND);
+ return presenceBuilder.build();
+ }
+
private void handleCapabilityUpdate(Task task, List<RcsContactUceCapability> capabilities,
boolean updateLastTimestamp) {
if (task == null || task.mListener == null ) {
@@ -568,8 +577,11 @@ public class PresenceSubscriber extends PresenceBase {
continue;
}
// Add each contacts with no capabilities.
- presenceInfoList.add(new RcsContactUceCapability.Builder(
- PresenceUtils.convertContactNumber(task.mContacts[i])).build());
+ Uri uri = PresenceUtils.convertContactNumber(task.mContacts[i]);
+ PresenceBuilder presenceBuilder = new PresenceBuilder(uri,
+ RcsContactUceCapability.SOURCE_TYPE_CACHED,
+ RcsContactUceCapability.REQUEST_RESULT_FOUND);
+ presenceInfoList.add(presenceBuilder.build());
}
if(presenceInfoList.size() > 0) {