summaryrefslogtreecommitdiff
path: root/rcs/rcsservice/src/com/android/service/ims/PresenceInfoParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'rcs/rcsservice/src/com/android/service/ims/PresenceInfoParser.java')
-rw-r--r--rcs/rcsservice/src/com/android/service/ims/PresenceInfoParser.java58
1 files changed, 41 insertions, 17 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());
}