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

Commit a988f433 authored by Tyler Gunn's avatar Tyler Gunn
Browse files

Resolve dependency on XmlUtils.nextElementWithin.

This is a trivial method; just copying it into PhoneAccountRegistrar to
remove the dependency.  Given the trivial nature of the test, I just set
the unit tests to use the flagged path (it did run fine with the unflagged
path as well).

Flag: com.android.server.telecom.flags.resolve_hidden_dependencies_two
Test: Run Telecom unit tests.
Test: Run Telecom CTS tests.
Fixes: 308471542
Change-Id: I1b961ed3e1aef9e90bf6d7e308a811bb71fe0fec
parent 60f0b0cf
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -10,6 +10,17 @@ flag {
    bug: "323414215"
}

# OWNER=tgunn TARGET=26Q2
flag {
  name: "resolve_hidden_dependencies_two"
  namespace: "telecom"
  description: "Resolve hidden dependencies in Telecom related to mainline"
  bug: "405460896"
  metadata {
    purpose: PURPOSE_FEATURE
  }
}

flag {
    name: "telecom_mainline_blocked_numbers_manager"
    namespace: "telecom"
+45 −13
Original line number Diff line number Diff line
@@ -2197,6 +2197,35 @@ public class PhoneAccountRegistrar {
        private static final String VALUE_TYPE_INTEGER = "integer";
        private static final String VALUE_TYPE_BOOLEAN = "boolean";

        /**
         * Copy of {@code com.android.internal.util.XmlUtils} method for fiding the next element
         * in an XmlPullParser.
         * @param parser The parser
         * @param outerDepth Outer depth to look at.
         * @param featureFlags Telecom flags to refer back to the old implementation.
         * @return {@code true} if a next element is found, {@code false otherwise}.
         * @throws IOException
         * @throws XmlPullParserException
         */
        public boolean nextElementWithin(XmlPullParser parser, int outerDepth,
                com.android.server.telecom.flags.FeatureFlags featureFlags)
                throws IOException, XmlPullParserException {
            if (!featureFlags.resolveHiddenDependenciesTwo()) {
                return XmlUtils.nextElementWithin(parser, outerDepth);
            }
            for (;;) {
                int type = parser.next();
                if (type == XmlPullParser.END_DOCUMENT
                        || (type == XmlPullParser.END_TAG && parser.getDepth() == outerDepth)) {
                    return false;
                }
                if (type == XmlPullParser.START_TAG
                        && parser.getDepth() == outerDepth + 1) {
                    return true;
                }
            }
        }

        /**
         * Write the supplied object to XML
         */
@@ -2350,7 +2379,7 @@ public class PhoneAccountRegistrar {
            if (length == 0) return handles;

            int outerDepth = parser.getDepth();
            while (XmlUtils.nextElementWithin(parser, outerDepth)) {
            while (nextElementWithin(parser, outerDepth, telecomFeatureFlags)) {
                handles.add(sPhoneAccountHandleXml.readFromXml(parser, version, context,
                        telephonyFeatureFlags, telecomFeatureFlags));
            }
@@ -2365,7 +2394,8 @@ public class PhoneAccountRegistrar {
         * @throws IOException Exception related to IO.
         * @throws XmlPullParserException Exception related to parsing.
         */
        protected List<String> readStringList(XmlPullParser parser)
        protected List<String> readStringList(XmlPullParser parser,
                com.android.server.telecom.flags.FeatureFlags telecomFeatureFlags)
                throws IOException, XmlPullParserException {

            int length = Integer.parseInt(parser.getAttributeValue(null, ATTRIBUTE_LENGTH));
@@ -2377,7 +2407,7 @@ public class PhoneAccountRegistrar {
            }

            int outerDepth = parser.getDepth();
            while (XmlUtils.nextElementWithin(parser, outerDepth)) {
            while (nextElementWithin(parser, outerDepth, telecomFeatureFlags)) {
                if (parser.getName().equals(TAG_VALUE)) {
                    parser.next();
                    value = parser.getText();
@@ -2396,12 +2426,13 @@ public class PhoneAccountRegistrar {
         * @throws IOException Exception related to IO.
         * @throws XmlPullParserException Exception related to parsing.
         */
        protected Bundle readBundle(XmlPullParser parser)
        protected Bundle readBundle(XmlPullParser parser,
                com.android.server.telecom.flags.FeatureFlags telecomFeatureFlags)
                throws IOException, XmlPullParserException {

            Bundle bundle = null;
            int outerDepth = parser.getDepth();
            while (XmlUtils.nextElementWithin(parser, outerDepth)) {
            while (nextElementWithin(parser, outerDepth, telecomFeatureFlags)) {
                if (parser.getName().equals(TAG_VALUE)) {
                    String valueType = parser.getAttributeValue(null, ATTRIBUTE_VALUE_TYPE);
                    String key = parser.getAttributeValue(null, ATTRIBUTE_KEY);
@@ -2501,7 +2532,7 @@ public class PhoneAccountRegistrar {
                s.versionNumber = TextUtils.isEmpty(rawVersion) ? 1 : Integer.parseInt(rawVersion);

                int outerDepth = parser.getDepth();
                while (XmlUtils.nextElementWithin(parser, outerDepth)) {
                while (nextElementWithin(parser, outerDepth, telecomFeatureFlags)) {
                    if (parser.getName().equals(DEFAULT_OUTGOING)) {
                        if (s.versionNumber < 9) {
                            // Migrate old default phone account handle here by assuming the
@@ -2530,7 +2561,8 @@ public class PhoneAccountRegistrar {
                            }
                        } else {
                            int defaultAccountHandlesDepth = parser.getDepth();
                            while (XmlUtils.nextElementWithin(parser, defaultAccountHandlesDepth)) {
                            while (nextElementWithin(parser, defaultAccountHandlesDepth,
                                    telecomFeatureFlags)) {
                                DefaultPhoneAccountHandle accountHandle
                                        = sDefaultPhoneAccountHandleXml
                                        .readFromXml(parser, s.versionNumber, context,
@@ -2543,7 +2575,7 @@ public class PhoneAccountRegistrar {
                        }
                    } else if (parser.getName().equals(ACCOUNTS)) {
                        int accountsDepth = parser.getDepth();
                        while (XmlUtils.nextElementWithin(parser, accountsDepth)) {
                        while (nextElementWithin(parser, accountsDepth, telecomFeatureFlags)) {
                            PhoneAccount account = sPhoneAccountXml.readFromXml(parser,
                                    s.versionNumber, context, telephonyFeatureFlags,
                                    telecomFeatureFlags);
@@ -2598,7 +2630,7 @@ public class PhoneAccountRegistrar {
                        PhoneAccountHandle accountHandle = null;
                        String userSerialNumberString = null;
                        String groupId = "";
                        while (XmlUtils.nextElementWithin(parser, outerDepth)) {
                        while (nextElementWithin(parser, outerDepth, telecomFeatureFlags)) {
                            if (parser.getName().equals(ACCOUNT_HANDLE)) {
                                parser.nextTag();
                                accountHandle = sPhoneAccountHandleXml.readFromXml(parser, version,
@@ -2716,7 +2748,7 @@ public class PhoneAccountRegistrar {
                Bundle extras = null;
                Set<PhoneAccountHandle> simultaneousCallingRestriction = null;

                while (XmlUtils.nextElementWithin(parser, outerDepth)) {
                while (nextElementWithin(parser, outerDepth, telecomFeatureFlags)) {
                    if (parser.getName().equals(ACCOUNT_HANDLE)) {
                        parser.nextTag();
                        accountHandle = sPhoneAccountHandleXml.readFromXml(parser, version,
@@ -2753,7 +2785,7 @@ public class PhoneAccountRegistrar {
                        parser.next();
                        shortDescription = parser.getText();
                    } else if (parser.getName().equals(SUPPORTED_URI_SCHEMES)) {
                        supportedUriSchemes = readStringList(parser);
                        supportedUriSchemes = readStringList(parser, telecomFeatureFlags);
                    } else if (parser.getName().equals(ICON)) {
                        parser.next();
                        icon = readIcon(parser);
@@ -2761,7 +2793,7 @@ public class PhoneAccountRegistrar {
                        parser.next();
                        enabled = "true".equalsIgnoreCase(parser.getText());
                    } else if (parser.getName().equals(EXTRAS)) {
                        extras = readBundle(parser);
                        extras = readBundle(parser, telecomFeatureFlags);
                    } else if (parser.getName().equals(SUPPORTED_AUDIO_ROUTES)) {
                        parser.next();
                        supportedAudioRoutes = Integer.parseInt(parser.getText());
@@ -2921,7 +2953,7 @@ public class PhoneAccountRegistrar {

                UserManager userManager = context.getSystemService(UserManager.class);

                while (XmlUtils.nextElementWithin(parser, outerDepth)) {
                while (nextElementWithin(parser, outerDepth, telecomFeatureFlags)) {
                    if (parser.getName().equals(COMPONENT_NAME)) {
                        parser.next();
                        componentNameString = parser.getText();
+1 −0
Original line number Diff line number Diff line
@@ -143,6 +143,7 @@ public class PhoneAccountRegistrarTest extends TelecomTestCase {
        when(mFeatureFlags.onlyUpdateTelephonyOnValidSubIds()).thenReturn(false);
        when(mFeatureFlags.unregisterUnresolvableAccounts()).thenReturn(true);
        when(mTelephonyFeatureFlags.workProfileApiSplit()).thenReturn(false);
        when(mFeatureFlags.resolveHiddenDependenciesTwo()).thenReturn(true);
    }

    @Override