Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62b44869 authored by James.cf Lin's avatar James.cf Lin Committed by James Lin
Browse files

[RCS UCE] Update the TupleFactory to get feature capable from RcsContactUceCapability

The class RcsContactUceCapability is refactored, the way to use the class is updated.

Bug: 170785010
Test: atest PidfParserTest
Change-Id: I1cd408821b0ef85054163e85ae0de5488af8aa41
parent aa52377b
Loading
Loading
Loading
Loading
+29 −7
Original line number Original line Diff line number Diff line
@@ -16,10 +16,8 @@


package com.android.ims.rcs.uce.presence.pidfparser;
package com.android.ims.rcs.uce.presence.pidfparser;


import static android.telephony.ims.RcsContactUceCapability.CAPABILITY_DISCOVERY_VIA_PRESENCE;
import android.telephony.ims.RcsContactPresenceTuple;
import static android.telephony.ims.RcsContactUceCapability.CAPABILITY_IP_VIDEO_CALL;
import android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities;
import static android.telephony.ims.RcsContactUceCapability.CAPABILITY_IP_VOICE_CALL;

import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsContactUceCapability;


import com.android.ims.rcs.uce.presence.pidfparser.capabilities.Audio;
import com.android.ims.rcs.uce.presence.pidfparser.capabilities.Audio;
@@ -42,7 +40,7 @@ public class TupleFactory {
     */
     */
    public static Tuple getCapabilityDiscoveryTuple(RcsContactUceCapability contactCaps) {
    public static Tuple getCapabilityDiscoveryTuple(RcsContactUceCapability contactCaps) {
        // Return directly if it is not supported.
        // Return directly if it is not supported.
        if (!contactCaps.isCapable(CAPABILITY_DISCOVERY_VIA_PRESENCE)) {
        if (contactCaps == null) {
            return null;
            return null;
        }
        }
        Tuple tuple = new Tuple();
        Tuple tuple = new Tuple();
@@ -89,8 +87,8 @@ public class TupleFactory {


        // The service capabilities element
        // The service capabilities element
        ServiceCaps serviceCaps = new ServiceCaps();
        ServiceCaps serviceCaps = new ServiceCaps();
        Audio audio = new Audio(contactCaps.isCapable(CAPABILITY_IP_VOICE_CALL));
        Audio audio = new Audio(isVolteCapable(contactCaps));
        Video video = new Video(contactCaps.isCapable(CAPABILITY_IP_VIDEO_CALL));
        Video video = new Video(isVtCapable(contactCaps));
        Duplex duplex = new Duplex();
        Duplex duplex = new Duplex();
        duplex.setSupportedType(Duplex.DUPLEX_FULL);
        duplex.setSupportedType(Duplex.DUPLEX_FULL);
        serviceCaps.addElement(audio);
        serviceCaps.addElement(audio);
@@ -105,4 +103,28 @@ public class TupleFactory {


        return tuple;
        return tuple;
    }
    }

    private static boolean isVolteCapable(RcsContactUceCapability capability) {
        RcsContactPresenceTuple presenceTuple = capability.getPresenceTuple(
                RcsContactPresenceTuple.SERVICE_ID_MMTEL);
        if (presenceTuple != null) {
            ServiceCapabilities serviceCaps = presenceTuple.getServiceCapabilities();
            if (serviceCaps != null && serviceCaps.isAudioCapable()) {
                return true;
            }
        }
        return false;
    }

    private static boolean isVtCapable(RcsContactUceCapability capability) {
        RcsContactPresenceTuple presenceTuple = capability.getPresenceTuple(
                RcsContactPresenceTuple.SERVICE_ID_MMTEL);
        if (presenceTuple != null) {
            ServiceCapabilities serviceCaps = presenceTuple.getServiceCapabilities();
            if (serviceCaps != null && serviceCaps.isVideoCapable()) {
                return true;
            }
        }
        return false;
    }
}
}
+19 −9
Original line number Original line Diff line number Diff line
@@ -22,7 +22,10 @@ import android.telecom.PhoneAccount;
import android.telecom.TelecomManager;
import android.telecom.TelecomManager;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants;
import android.telephony.TelephonyManager;
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;
import android.telephony.ims.RcsContactUceCapability.PresenceBuilder;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.feature.MmTelFeature.MmTelCapabilities;
import android.telephony.ims.feature.MmTelFeature.MmTelCapabilities;
import android.util.Log;
import android.util.Log;
@@ -246,7 +249,7 @@ public class DeviceCapabilityInfo {
    }
    }


    /**
    /**
     * Get the device capabilities
     * Get the device's capabilities.
     */
     */
    public synchronized RcsContactUceCapability getDeviceCapabilities(Context context) {
    public synchronized RcsContactUceCapability getDeviceCapabilities(Context context) {
        Uri uri = PublishUtils.getPublishingUri(context, mSubId);
        Uri uri = PublishUtils.getPublishingUri(context, mSubId);
@@ -254,14 +257,21 @@ public class DeviceCapabilityInfo {
            logw("getDeviceCapabilities: uri is empty");
            logw("getDeviceCapabilities: uri is empty");
            return null;
            return null;
        }
        }
        RcsContactUceCapability.Builder builder = new RcsContactUceCapability.Builder(uri);
        ServiceCapabilities.Builder servCapsBuilder = new ServiceCapabilities.Builder(
        if (hasVolteCapability()) {
            hasVolteCapability(), hasVtCapability());
            builder.add(RcsContactUceCapability.CAPABILITY_IP_VOICE_CALL);
        servCapsBuilder.addSupportedDuplexMode(ServiceCapabilities.DUPLEX_MODE_FULL);
        }

        if (hasVtCapability()) {
        RcsContactPresenceTuple.Builder tupleBuilder = new RcsContactPresenceTuple.Builder(
            builder.add(RcsContactUceCapability.CAPABILITY_IP_VIDEO_CALL);
                RcsContactPresenceTuple.TUPLE_BASIC_STATUS_OPEN,
        }
                RcsContactPresenceTuple.SERVICE_ID_MMTEL, "1.0");
        return builder.build();
        tupleBuilder.addContactUri(uri).addServiceCapabilities(servCapsBuilder.build());

        PresenceBuilder presenceBuilder = new PresenceBuilder(uri,
                RcsContactUceCapability.SOURCE_TYPE_CACHED,
                RcsContactUceCapability.REQUEST_RESULT_FOUND);
        presenceBuilder.addCapabilityTuple(tupleBuilder.build());

        return presenceBuilder.build();
    }
    }


    // Check if the device has the VoLTE capability
    // Check if the device has the VoLTE capability
+16 −5
Original line number Original line Diff line number Diff line
@@ -3,7 +3,10 @@ package com.android.ims.rcs.uce.presence.pidfparser;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;


import android.net.Uri;
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;
import android.telephony.ims.RcsContactUceCapability.PresenceBuilder;
import android.util.Log;
import android.util.Log;


import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -34,12 +37,20 @@ public class PidfParserTest extends ImsTestBase {
    @SmallTest
    @SmallTest
    public void testConvertToPidf() throws Exception {
    public void testConvertToPidf() throws Exception {
        Uri contact = Uri.fromParts("sip", "test", null);
        Uri contact = Uri.fromParts("sip", "test", null);
        RcsContactUceCapability.Builder builder = new RcsContactUceCapability.Builder(contact);
        ServiceCapabilities.Builder servCapsBuilder = new ServiceCapabilities.Builder(true, true);
        builder.add(RcsContactUceCapability.CAPABILITY_DISCOVERY_VIA_PRESENCE);
        servCapsBuilder.addSupportedDuplexMode(ServiceCapabilities.DUPLEX_MODE_FULL);
        builder.add(RcsContactUceCapability.CAPABILITY_IP_VOICE_CALL);
        builder.add(RcsContactUceCapability.CAPABILITY_IP_VIDEO_CALL);


        String pidfResult = PidfParser.convertToPidf(builder.build());
        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());

        String pidfResult = PidfParser.convertToPidf(presenceBuilder.build());


        String audioSupported = "<caps:audio>true</caps:audio>";
        String audioSupported = "<caps:audio>true</caps:audio>";
        String videoSupported = "<caps:video>true</caps:video>";
        String videoSupported = "<caps:video>true</caps:video>";