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

Commit ea7eb5ab authored by Hyunho's avatar Hyunho
Browse files

Added chatbot and chatbot standalone descriptions for bot versions #1,#2

When botversion #1 is registered, chatbot version 1.0 description is set.
When botversions #1, #2 is registered, chatbot version 1.0 and 2.0 descriptions are set.

Bug: b/213487716
Test: atest PublishServiceDescTrackerTest
Change-Id: I0b2d85f4230844b30eb67178647829b12ba932bb
parent fdd2a8f5
Loading
Loading
Loading
Loading
+17 −8
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ public class PublishServiceDescTracker {
     */
    private static final Map<ServiceDescription, Set<String>> DEFAULT_SERVICE_DESCRIPTION_MAP;
    static {
        ArrayMap<ServiceDescription, Set<String>> map = new ArrayMap<>(19);
        ArrayMap<ServiceDescription, Set<String>> map = new ArrayMap<>(21);
        map.put(ServiceDescription.SERVICE_DESCRIPTION_CHAT_IM,
                Collections.singleton(FeatureTags.FEATURE_TAG_CHAT_IM));
        map.put(ServiceDescription.SERVICE_DESCRIPTION_CHAT_SESSION,
@@ -83,22 +83,32 @@ public class PublishServiceDescTracker {
                Collections.singleton(FeatureTags.FEATURE_TAG_SHARED_MAP));
        map.put(ServiceDescription.SERVICE_DESCRIPTION_SHARED_SKETCH,
                Collections.singleton(FeatureTags.FEATURE_TAG_SHARED_SKETCH));
        // Feature tags defined twice for chatbot session because we want v1 and v2 based on bot
        // version
        // A map has one key and one value. And if the same key is used, the value is replaced
        // with a new one.
        // The service description between SERVICE_DESCRIPTION_CHATBOT_SESSION and
        // SERVICE_DESCRIPTION_CHATBOT_SESSION_V1 is the same, but this is for botVersion=#1 .
        map.put(ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION, new ArraySet<>(
                Arrays.asList(FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_SESSION,
                        FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED)));
        // This is the service description for botVersion=#1,#2 .
        map.put(ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION_V1, new ArraySet<>(
                Arrays.asList(FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_SESSION,
                        FeatureTags.FEATURE_TAG_CHATBOT_VERSION_V2_SUPPORTED)));
        map.put(ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION_V2, new ArraySet<>(
                Arrays.asList(FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_SESSION,
                        FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED)));
        // Feature tags defined twice for chatbot sa session because we want v1 and v2 based on bot
        // version
                        FeatureTags.FEATURE_TAG_CHATBOT_VERSION_V2_SUPPORTED)));
        // The service description between SERVICE_DESCRIPTION_CHATBOT_SA_SESSION and
        // SERVICE_DESCRIPTION_CHATBOT_SA_SESSION_V1 is the same, but this is for botVersion=#1 .
        map.put(ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SA_SESSION, new ArraySet<>(
                Arrays.asList(FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_STANDALONE_MSG,
                        FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED)));
        // This is the service description for botVersion=#1,#2 .
        map.put(ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SA_SESSION_V1, new ArraySet<>(
                Arrays.asList(FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_STANDALONE_MSG,
                        FeatureTags.FEATURE_TAG_CHATBOT_VERSION_V2_SUPPORTED)));
        map.put(ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SA_SESSION_V2, new ArraySet<>(
                Arrays.asList(FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_STANDALONE_MSG,
                        FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED)));
                        FeatureTags.FEATURE_TAG_CHATBOT_VERSION_V2_SUPPORTED)));
        map.put(ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_ROLE,
                Collections.singleton(FeatureTags.FEATURE_TAG_CHATBOT_ROLE));
        DEFAULT_SERVICE_DESCRIPTION_MAP = Collections.unmodifiableMap(map);
@@ -183,7 +193,6 @@ public class PublishServiceDescTracker {
                .map(PublishServiceDescTracker::parseFeatureTags)
                // Each entry should only contain one feature tag.
                .map(s -> s.iterator().next()).collect(Collectors.toSet());

        // For aliased service descriptions (service-id && version is the same, but desc is
        // different), Keep a "score" of the number of feature tags that the service description
        // has associated with it. If another is found with a higher score, replace this one.
+23 −7
Original line number Diff line number Diff line
@@ -117,7 +117,8 @@ public class ServiceDescription {
                    "1.0" /*version*/,
                    null /*description*/
    );

    // this is the same as below but redefined so that it can be a separate key entry
    // in DEFAULT_SERVICE_DESCRIPTION_MAP
    public static final ServiceDescription SERVICE_DESCRIPTION_CHATBOT_SESSION =
            new ServiceDescription(
                    RcsContactPresenceTuple.SERVICE_ID_CHATBOT,
@@ -125,13 +126,21 @@ public class ServiceDescription {
                    null /*description*/
    );

    public static final ServiceDescription SERVICE_DESCRIPTION_CHATBOT_SESSION_V1 =
            new ServiceDescription(
                    RcsContactPresenceTuple.SERVICE_ID_CHATBOT,
                    "1.0" /*version*/,
                    "Chatbot Session" /*description*/
            );

    public static final ServiceDescription SERVICE_DESCRIPTION_CHATBOT_SESSION_V2 =
            new ServiceDescription(
                    RcsContactPresenceTuple.SERVICE_ID_CHATBOT,
                    "2.0" /*version*/,
                    null /*description*/
                    "Chatbot Session" /*description*/
    );

    // this is the same as below but redefined so that it can be a separate key entry
    // in DEFAULT_SERVICE_DESCRIPTION_MAP
    public static final ServiceDescription SERVICE_DESCRIPTION_CHATBOT_SA_SESSION =
            new ServiceDescription(
                    RcsContactPresenceTuple.SERVICE_ID_CHATBOT_STANDALONE.trim(),
@@ -139,11 +148,18 @@ public class ServiceDescription {
                    null /*description*/
    );

    public static final ServiceDescription SERVICE_DESCRIPTION_CHATBOT_SA_SESSION_V1 =
            new ServiceDescription(
                    RcsContactPresenceTuple.SERVICE_ID_CHATBOT_STANDALONE.trim(),
                    "1.0" /*version*/,
                    "Chatbot Standalone" /*description*/
    );

    public static final ServiceDescription SERVICE_DESCRIPTION_CHATBOT_SA_SESSION_V2 =
            new ServiceDescription(
                    RcsContactPresenceTuple.SERVICE_ID_CHATBOT_STANDALONE.trim(),
                    "2.0" /*version*/,
                    null /*description*/
                    "Chatbot Standalone" /*description*/
    );

    public static final ServiceDescription SERVICE_DESCRIPTION_CHATBOT_ROLE =
+3 −0
Original line number Diff line number Diff line
@@ -74,6 +74,9 @@ public class FeatureTags {
            "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.chatbot.sa\"";

    public static final String FEATURE_TAG_CHATBOT_VERSION_SUPPORTED =
            "+g.gsma.rcs.botversion=\"#=1\"";

    public static final String FEATURE_TAG_CHATBOT_VERSION_V2_SUPPORTED =
            "+g.gsma.rcs.botversion=\"#=1,#=2\"";

    public static final String FEATURE_TAG_CHATBOT_ROLE = "+g.gsma.rcs.isbot";
+31 −6
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals;

import android.telephony.ims.RcsContactPresenceTuple;
import android.util.ArraySet;
import android.util.Log;

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
@@ -31,6 +32,7 @@ import org.junit.runner.RunWith;

import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.Set;

@RunWith(AndroidJUnit4.class)
@@ -65,9 +67,12 @@ public class PublishServiceDescTrackerTest {
    public static final String TEST_FEATURE_TAG_CHATBOT_FORMAT =
            " +g.3gpp.iari-ref=  \" Urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.chatbot \"";

    public static final String TEST_FEATURE_TAG_BOTVERSION_FORMAT =
    public static final String TEST_FEATURE_TAG_BOTVERSION_V2_FORMAT =
            "+g.gsma.rcs.botVersion =\" #=1  , #=2 \"    ";

    public static final String TEST_FEATURE_TAG_BOTVERSION_FORMAT =
            "+g.gsma.rcs.botVersion =\" #=1   \"    ";

    public static final String TEST_FEATURE_TAG_MMTEL_FORMAT =
            "  +g.3gpp.icsi-ref =    \"urn%3Aurn-7%3A3gpp-servIce.ims.icsi.mmtel \"   ";

@@ -102,13 +107,22 @@ public class PublishServiceDescTrackerTest {
        t1.updateImsRegistration(imsReg);
        assertEquals(expectedSet, t1.copyRegistrationCapabilities());


        expectedSet = Collections.singleton(
                ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION);
        imsReg = createImsRegistration(
                FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_SESSION,
                FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED);
        t1.updateImsRegistration(imsReg);
        assertEquals(expectedSet, t1.copyRegistrationCapabilities());

        // Should see chatbot v1 and v2 pop up in this case (same FTs)
        expectedSet = new ArraySet<>(Arrays.asList(
                ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION,
                ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION_V1,
                ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION_V2));
        imsReg = createImsRegistration(
                FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_SESSION,
                FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED);
                FeatureTags.FEATURE_TAG_CHATBOT_VERSION_V2_SUPPORTED);
        t1.updateImsRegistration(imsReg);
        assertEquals(expectedSet, t1.copyRegistrationCapabilities());

@@ -185,13 +199,24 @@ public class PublishServiceDescTrackerTest {
        t1.updateImsRegistration(imsReg);
        assertEquals(expectedSet, t1.copyRegistrationCapabilities());

        // Should see chatbot v1 and v2 pop up in this case (same FTs)
        // The registered tag is botVersion=#1,
        // so check if the service description of chatbot version 1.0 should be set.
        expectedSet = Collections.singleton(
                ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION);
        imsReg = createImsRegistration(
                TEST_FEATURE_TAG_CHATBOT_FORMAT,
                TEST_FEATURE_TAG_BOTVERSION_FORMAT);
        t1.updateImsRegistration(imsReg);
        assertEquals(expectedSet, t1.copyRegistrationCapabilities());

        // The registered tag is botVersion=#1,#2,
        // so check if the service description of chatbot version 1.0 and 2.0 should be set.
        expectedSet = new ArraySet<>(Arrays.asList(
                ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION,
                ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION_V1,
                ServiceDescription.SERVICE_DESCRIPTION_CHATBOT_SESSION_V2));
        imsReg = createImsRegistration(
                TEST_FEATURE_TAG_CHATBOT_FORMAT,
                TEST_FEATURE_TAG_BOTVERSION_FORMAT);
                TEST_FEATURE_TAG_BOTVERSION_V2_FORMAT);
        t1.updateImsRegistration(imsReg);
        assertEquals(expectedSet, t1.copyRegistrationCapabilities());