diff options
author | James Lin <jamescflin@google.com> | 2020-10-16 01:15:28 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-10-16 01:15:28 +0000 |
commit | 4695ee64c628b140c8725c330fa6da32f72755c1 (patch) | |
tree | 35d6607dcf1ca7bbe46458219c9fb2fb9b01dd12 /rcs | |
parent | 633ecaa4a970f21bb915b33cafed672dbae60ad0 (diff) | |
parent | e461673121f764721a96d0b9d24b7c566f74bcd4 (diff) | |
download | ims-4695ee64c628b140c8725c330fa6da32f72755c1.tar.gz |
Merge "[RCS UCE] Update the way to get feature capable from RcsContactUceCapability"
Diffstat (limited to 'rcs')
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) { |