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

Commit 4dfc2a5f authored by Hui Wang's avatar Hui Wang Committed by Automerger Merge Worker
Browse files

Merge "Update the format of RCS provisioning config XML" am: 3f4a3085

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1695105

Change-Id: Ia0171a1369c1029141b9af1fc903969da97a1fc4
parents a25e0e7e 3f4a3085
Loading
Loading
Loading
Loading
+161 −30
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.telephony.ims;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;

@@ -25,9 +26,9 @@ import static org.mockito.Mockito.when;

import android.content.ContentValues;
import android.content.Context;
import android.os.Parcel;
import android.telephony.SubscriptionManager;
import android.telephony.ims.RcsConfig;
import android.telephony.ims.RcsConfig.Characteristic;
import android.test.mock.MockContentResolver;
import android.test.suitebuilder.annotation.SmallTest;

@@ -46,32 +47,118 @@ import java.util.Arrays;
@RunWith(AndroidJUnit4.class)
public final class RcsConfigTest {

    private static final String TEST_RCS_CONFIG = "<RCSConfig>\n"
            + "\t<rcsVolteSingleRegistration>1</rcsVolteSingleRegistration>\n"
            + "\t<SERVICES>\n"
            + "\t\t<SupportedRCSProfileVersions>UP_2.0</SupportedRCSProfileVersions>\n"
            + "\t\t<ChatAuth>1</ChatAuth>\n"
            + "\t\t<GroupChatAuth>1</GroupChatAuth>\n"
            + "\t\t<ftAuth>1</ftAuth>\n"
            + "\t\t<standaloneMsgAuth>1</standaloneMsgAuth>\n"
            + "\t\t<geolocPushAuth>1</geolocPushAuth>\n"
            + "\t\t<Ext>\n"
            + "\t\t\t<DataOff>\n"
            + "\t\t\t\t<rcsMessagingDataOff>1</rcsMessagingDataOff>\n"
            + "\t\t\t\t<fileTransferDataOff>1</fileTransferDataOff>\n"
            + "\t\t\t\t<mmsDataOff>1</mmsDataOff>\n"
            + "\t\t\t\t<syncDataOff>1</syncDataOff>\n"
            + "\t\t\t</DataOff>\n"
            + "\t\t</Ext>\n"
            + "\t</SERVICES>\n"
            + "</RCSConfig>";
    private static final String TEST_RCS_CONFIG = "<?xml version=\"1.0\"?>\n"
            + "<wap-provisioningdoc version=\"1.1\">\n"
            + "\t<characteristic type=\"APPLICATION\">\n"
            + "\t\t<parm name=\"AppID\" value=\"urn:oma:mo:ext-3gpp-ims:1.0\"/>\n"
            + "\t\t<characteristic type=\"3GPP_IMS\">\n"
            + "\t\t\t<parm name=\"AppID\" value=\"ap2001\"/>\n"
            + "\t\t\t<parm name=\"Name\" value=\"RCS IMS Settings\"/>\n"
            + "\t\t\t<characteristic type=\"Ext\">\n"
            + "\t\t\t\t<characteristic type=\"GSMA\">\n"
            + "\t\t\t\t\t<parm name=\"AppRef\" value=\"IMS-Setting\"/>\n"
            + "\t\t\t\t\t<parm name=\"rcsVolteSingleRegistration\" value=\"1\"/>\n"
            + "\t\t\t\t</characteristic>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t</characteristic>\n"
            + "\t\t<characteristic type=\"SERVICES\">\n"
            + "\t\t\t<parm name=\"SupportedRCSProfileVersions\" value=\"UP_2.3\"/>\n"
            + "\t\t\t<parm name=\"ChatAuth\" value=\"1\"/>\n"
            + "\t\t\t<parm name=\"GroupChatAuth\" value=\"1\"/>\n"
            + "\t\t\t<parm name=\"ftAuth\" value=\"1\"/>\n"
            + "\t\t\t<parm name=\"standaloneMsgAuth\" value=\"1\"/>\n"
            + "\t\t\t<parm name=\"geolocPushAuth\" value=\"1\"/>\n"
            + "\t\t\t<characteristic type=\"Ext\">\n"
            + "\t\t\t\t<characteristic type=\"DataOff\">\n"
            + "\t\t\t\t\t<parm name=\"rcsMessagingDataOff\" value=\"1\"/>\n"
            + "\t\t\t\t\t<parm name=\"fileTransferDataOff\" value=\"1\"/>\n"
            + "\t\t\t\t\t<parm name=\"mmsDataOff\" value=\"1\"/>\n"
            + "\t\t\t\t\t<parm name=\"syncDataOff\" value=\"1\"/>\n"
            + "\t\t\t\t\t<characteristic type=\"Ext\"/>\n"
            + "\t\t\t\t</characteristic>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t</characteristic>\n"
            + "\t\t<characteristic type=\"PRESENCE\">\n"
            + "\t\t\t<parm name=\"client-obj-datalimit\" value=\"8192\"/>\n"
            + "\t\t\t<parm name=\"content-serveruri\" value=\"X\"/>\n"
            + "\t\t\t<parm name=\"source-throttlepublish\" value=\"32\"/>\n"
            + "\t\t\t<parm name=\"max-number-ofsubscriptions-inpresence-list\" value=\"8\"/>\n"
            + "\t\t\t<parm name=\"service-uritemplate\" value=\"X\"/>\n"
            + "\t\t\t<parm name=\"RLS-URI\" value=\"X\"/>\n"
            + "\t\t</characteristic>\n"
            + "\t\t<characteristic type=\"MESSAGING\">\n"
            + "\t\t\t<characteristic type=\"StandaloneMsg\">\n"
            + "\t\t\t\t<parm name=\"MaxSize\" value=\"8192\"/>\n"
            + "\t\t\t\t<parm name=\"SwitchoverSize\" value=\"1024\"/>\n"
            + "\t\t\t\t<parm name=\"exploder-uri\" value=\"X\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<characteristic type=\"Chat\">\n"
            + "\t\t\t\t<parm name=\"max_adhoc_group_size\" value=\"60\"/>\n"
            + "\t\t\t\t<parm name=\"conf-fcty-uri\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"AutAccept\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"AutAcceptGroupChat\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"TimerIdle\" value=\"120\"/>\n"
            + "\t\t\t\t<parm name=\"MaxSize\" value=\"16384\"/>\n"
            + "\t\t\t\t<parm name=\"ChatRevokeTimer\" value=\"0\"/>\n"
            + "\t\t\t\t<parm name=\"reconnectGuardTimer\" value=\"0\"/>\n"
            + "\t\t\t\t<parm name=\"cfsTrigger\" value=\"1\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<parm name=\"max1ToManyRecipients\" value=\"8\"/>\n"
            + "\t\t\t<parm name=\"1toManySelectedTech\" value=\"1\"/>\n"
            + "\t\t\t<parm name=\"displayNotificationSwitch\" value=\"0\"/>\n"
            + "\t\t\t<parm name=\"contentCompressSize\" value=\"1024\"/>\n"
            + "\t\t\t<characteristic type=\"FileTransfer\">\n"
            + "\t\t\t\t<parm name=\"ftWarnSize\" value=\"0\"/>\n"
            + "\t\t\t\t<parm name=\"MaxSizeFileTr\" value=\"65536\"/>\n"
            + "\t\t\t\t<parm name=\"ftAutAccept\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPCSURI\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPDLURI\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPCSUser\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPCSPwd\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPFallback\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\" ftMax1ToManyRecipients\" value=\"0\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<characteristic type=\"Chatbot\">\n"
            + "\t\t\t\t<parm name=\"ChatbotDirectory\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"BotinfoFQDNRoot\" value=\"X\"/>\n"
            + "\t\t\t\t<part name=\"SpecificChatbotsList\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"IdentityInEnrichedSearch\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"PrivacyDisable\" value=\"0\"/>\n"
            + "\t\t\t\t<parm name=\"ChatbotMsgTech\" value=\"1\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<characteristic type=\"MessageStore\">\n"
            + "\t\t\t\t<parm name=\"MsgStoreUrl\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"MsgStoreNotifUrl\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"MsgStoreAuth\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"MsgStoreUserName\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"MsgStoreUserPwd\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"EventRpting\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"AuthArchive\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"SMSStore\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"MMSStore\" value=\"1\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<characteristic type=\"Ext\"/>\n"
            + "\t\t</characteristic>\n"
            + "\t</characteristic>\n"
            + "</wap-provisioningdoc>\n";

    private static final String[][] TEST_CONFIG_VALUES = {{"rcsVolteSingleRegistration", "1"},
        {"SupportedRCSProfileVersions", "UP_2.0"}, {"ChatAuth", "1"}, {"GroupChatAuth", "1"},
        {"SupportedRCSProfileVersions", "UP_2.3"}, {"ChatAuth", "1"}, {"GroupChatAuth", "1"},
        {"ftAuth", "1"}, {"standaloneMsgAuth", "1"}, {"geolocPushAuth", "1"},
        {"rcsMessagingDataOff", "1"}, {"fileTransferDataOff", "1"}, {"mmsDataOff", "1"},
        {"syncDataOff", "1"}};

    private static final String[] VALID_CHARACTERISTICS = {"APPLICATION", "3GPP_IMS", "Ext",
        "GSMA",  "SERVICES", "DaTAOFF", "PRESENCE", "MESSAGING", "Chat", "FileTransfer",
        "Chatbot", "MessageSTORE"};
    private static final String[] INVALID_CHARACTERISTICS = {"APP2LICATION", "3GPPIMS", "Exte",
        "GSMf",  "SERVICE", "DaTAOn", "PRESENCE2", "MESSAG", "Ch", "File", "STORE"};
    private static final String[][] SUB_CHARACTERISTICS = {
        {"APPLICATION", "3GPP_IMS", "Ext", "GSMA"},
        {"APPLICATION", "SERVICES", "Ext", "DataOff", "Ext"}};
    private static final String[][] SAME_PARMS_DIFF_CHARS_VALUE_MAP = {
        {"MaxSize", "Chat", "16384"}, {"MaxSize", "StandaloneMsg", "8192"}};

    private static final int FAKE_SUB_ID = 1;
    private MockContentResolver mContentResolver;
    private FakeTelephonyProvider mFakeTelephonyProvider;
@@ -126,6 +213,7 @@ public final class RcsConfigTest {
    @SmallTest
    public void testParseConfig() {
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());

        for (int i = 0; i < TEST_CONFIG_VALUES.length; i++) {
            assertEquals(config.getString(TEST_CONFIG_VALUES[i][0], null),
                    TEST_CONFIG_VALUES[i][1]);
@@ -134,14 +222,56 @@ public final class RcsConfigTest {

    @Test
    @SmallTest
    public void testParcelUnparcel() {
    public void testGetCharacteristic() {
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());

        for (int i = 0; i < VALID_CHARACTERISTICS.length; i++) {
            assertNotNull(config.getCharacteristic(VALID_CHARACTERISTICS[i]));
        }

        for (int i = 0; i < INVALID_CHARACTERISTICS.length; i++) {
            assertNull(config.getCharacteristic(INVALID_CHARACTERISTICS[i]));
        }
    }

    @Test
    @SmallTest
    public void testSetAndMoveCharacteristic() {
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());

        for (String[] sub : SUB_CHARACTERISTICS) {
            Characteristic[] cl = new Characteristic[sub.length];
            int c = 0;
            for (String cur : sub) {
                cl[c] = config.getCharacteristic(cur);
                assertNotNull(cl[c]);
                config.setCurrentCharacteristic(cl[c]);
                c++;
            }

            while (c > 0) {
                assertEquals(cl[--c], config.getCurrentCharacteristic());
                config.moveToParent();
            }

            assertEquals(config.getRoot(), config.getCurrentCharacteristic());
        }
    }

    @Test
    @SmallTest
    public void testGetDuplicateParmInDifferentCharacteristics() {
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());
        Parcel parcel = Parcel.obtain();
        config.writeToParcel(parcel, 0);
        parcel.setDataPosition(0);
        RcsConfig config2 = RcsConfig.CREATOR.createFromParcel(parcel);
        parcel.recycle();
        assertTrue(config.equals(config2));
        for (String[] sub : SAME_PARMS_DIFF_CHARS_VALUE_MAP) {
            config.moveToRoot();
            if (!sub[1].isEmpty()) {
                config.setCurrentCharacteristic(config.getCharacteristic(sub[1]));
            }

            String value = config.getString(sub[0], "");

            assertEquals(value, sub[2]);
        }
    }

    @Test
@@ -150,8 +280,9 @@ public final class RcsConfigTest {
        String[] vals = new String[]{"0", "1", "false", "true"};
        boolean[] expectedRes = new boolean[]{false, true, false, true};
        for (int i = 0; i < vals.length; i++) {
            String xml = "<RCSConfig>\n" + "\t<rcsVolteSingleRegistration>" + vals[i]
                    + "</rcsVolteSingleRegistration>\n" + "</RCSConfig>\n";
            String xml = "\t\t\t\t<characteristic type=\"GSMA\">\n"
                    + "\t\t\t\t\t<parm name=\"rcsVolteSingleRegistration\" value=\""
                    + vals[i] + "\"/>\n" + "\t\t\t\t</characteristic>\n";
            RcsConfig config = new RcsConfig(xml.getBytes());
            assertEquals(config.isRcsVolteSingleRegistrationSupported(), expectedRes[i]);
        }