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

Commit 0ec6f465 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Mechanical refactoring to new XML resolvers.

Related changes are introducing new TypedXmlSerializer and
TypedXmlPullParser interfaces which offer efficient access to
primitive attributes.

This change is a purely mechanical refactoring to prepare for
upcoming data format shifts, and has no behavior changes.

Bug: 171832118
Test: manual
Change-Id: Iad9796ce32bc449491c34c31f1f9a4b44efbcda4
parent 8099e30b
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -16,14 +16,19 @@

package com.android.server.pm;

import android.content.Intent;
import android.content.IntentFilter;
import android.os.UserHandle;
import android.util.Log;
import android.util.TypedXmlPullParser;
import android.util.TypedXmlSerializer;

import com.android.internal.util.XmlUtils;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import android.content.IntentFilter;
import android.util.Log;

import java.io.IOException;
import android.os.UserHandle;

/**
 * The {@link PackageManagerService} maintains some {@link CrossProfileIntentFilter}s for each user.
@@ -63,7 +68,7 @@ class CrossProfileIntentFilter extends IntentFilter {
        return mOwnerPackage;
    }

    CrossProfileIntentFilter(XmlPullParser parser) throws XmlPullParserException, IOException {
    CrossProfileIntentFilter(TypedXmlPullParser parser) throws XmlPullParserException, IOException {
        mTargetUserId = getIntFromXml(parser, ATTR_TARGET_USER_ID, UserHandle.USER_NULL);
        mOwnerPackage = getStringFromXml(parser, ATTR_OWNER_PACKAGE, "");
        mFlags = getIntFromXml(parser, ATTR_FLAGS, 0);
@@ -98,7 +103,7 @@ class CrossProfileIntentFilter extends IntentFilter {
        }
    }

    String getStringFromXml(XmlPullParser parser, String attribute, String defaultValue) {
    String getStringFromXml(TypedXmlPullParser parser, String attribute, String defaultValue) {
        String value = parser.getAttributeValue(null, attribute);
        if (value == null) {
            String msg = "Missing element under " + TAG +": " + attribute + " at " +
@@ -110,7 +115,7 @@ class CrossProfileIntentFilter extends IntentFilter {
        }
    }

    int getIntFromXml(XmlPullParser parser, String attribute, int defaultValue) {
    int getIntFromXml(TypedXmlPullParser parser, String attribute, int defaultValue) {
        String stringValue = getStringFromXml(parser, attribute, null);
        if (stringValue != null) {
            return Integer.parseInt(stringValue);
@@ -118,7 +123,7 @@ class CrossProfileIntentFilter extends IntentFilter {
        return defaultValue;
    }

    public void writeToXml(XmlSerializer serializer) throws IOException {
    public void writeToXml(TypedXmlSerializer serializer) throws IOException {
        serializer.attribute(null, ATTR_TARGET_USER_ID, Integer.toString(mTargetUserId));
        serializer.attribute(null, ATTR_FLAGS, Integer.toString(mFlags));
        serializer.attribute(null, ATTR_OWNER_PACKAGE, mOwnerPackage);
+7 −7
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ import android.util.PackageUtils;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.TypedXmlPullParser;
import android.util.TypedXmlSerializer;
import android.util.Xml;

import com.android.internal.annotations.GuardedBy;
@@ -1020,8 +1022,7 @@ class InstantAppRegistry {
        final String packageName = instantDir.getName();

        try {
            XmlPullParser parser = Xml.newPullParser();
            parser.setInput(in, StandardCharsets.UTF_8.name());
            TypedXmlPullParser parser = Xml.resolvePullParser(in);
            return new UninstalledInstantAppState(
                    parseMetadata(parser, packageName), timestamp);
        } catch (XmlPullParserException | IOException e) {
@@ -1061,7 +1062,7 @@ class InstantAppRegistry {
    }

    private static @Nullable
    InstantAppInfo parseMetadata(@NonNull XmlPullParser parser,
    InstantAppInfo parseMetadata(@NonNull TypedXmlPullParser parser,
                                 @NonNull String packageName)
            throws IOException, XmlPullParserException {
        final int outerDepth = parser.getDepth();
@@ -1073,7 +1074,7 @@ class InstantAppRegistry {
        return null;
    }

    private static InstantAppInfo parsePackage(@NonNull XmlPullParser parser,
    private static InstantAppInfo parsePackage(@NonNull TypedXmlPullParser parser,
                                               @NonNull String packageName)
            throws IOException, XmlPullParserException {
        String label = parser.getAttributeValue(null, ATTR_LABEL);
@@ -1098,7 +1099,7 @@ class InstantAppRegistry {
                requestedPermissions, grantedPermissions);
    }

    private static void parsePermissions(@NonNull XmlPullParser parser,
    private static void parsePermissions(@NonNull TypedXmlPullParser parser,
            @NonNull List<String> outRequestedPermissions,
            @NonNull List<String> outGrantedPermissions)
            throws IOException, XmlPullParserException {
@@ -1128,8 +1129,7 @@ class InstantAppRegistry {
        try {
            out = destination.startWrite();

            XmlSerializer serializer = Xml.newSerializer();
            serializer.setOutput(out, StandardCharsets.UTF_8.name());
            TypedXmlSerializer serializer = Xml.resolveSerializer(out);
            serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);

            serializer.startDocument(null, true);
+9 −8
Original line number Diff line number Diff line
@@ -26,12 +26,13 @@ import android.util.ArraySet;
import android.util.Base64;
import android.util.LongSparseArray;
import android.util.Slog;
import android.util.TypedXmlPullParser;
import android.util.TypedXmlSerializer;

import com.android.server.pm.parsing.pkg.AndroidPackage;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import java.io.IOException;
import java.io.PrintWriter;
@@ -671,7 +672,7 @@ public class KeySetManagerService {
        }
    }

    void writeKeySetManagerServiceLPr(XmlSerializer serializer) throws IOException {
    void writeKeySetManagerServiceLPr(TypedXmlSerializer serializer) throws IOException {
        serializer.startTag(null, "keyset-settings");
        serializer.attribute(null, "version", Integer.toString(CURRENT_VERSION));
        writePublicKeysLPr(serializer);
@@ -685,7 +686,7 @@ public class KeySetManagerService {
        serializer.endTag(null, "keyset-settings");
    }

    void writePublicKeysLPr(XmlSerializer serializer) throws IOException {
    void writePublicKeysLPr(TypedXmlSerializer serializer) throws IOException {
        serializer.startTag(null, "keys");
        for (int pKeyIndex = 0; pKeyIndex < mPublicKeys.size(); pKeyIndex++) {
            long id = mPublicKeys.keyAt(pKeyIndex);
@@ -699,7 +700,7 @@ public class KeySetManagerService {
        serializer.endTag(null, "keys");
    }

    void writeKeySetsLPr(XmlSerializer serializer) throws IOException {
    void writeKeySetsLPr(TypedXmlSerializer serializer) throws IOException {
        serializer.startTag(null, "keysets");
        for (int keySetIndex = 0; keySetIndex < mKeySetMapping.size(); keySetIndex++) {
            long id = mKeySetMapping.keyAt(keySetIndex);
@@ -716,7 +717,7 @@ public class KeySetManagerService {
        serializer.endTag(null, "keysets");
    }

    void readKeySetsLPw(XmlPullParser parser, ArrayMap<Long, Integer> keySetRefCounts)
    void readKeySetsLPw(TypedXmlPullParser parser, ArrayMap<Long, Integer> keySetRefCounts)
            throws XmlPullParserException, IOException {
        int type;
        long currentKeySetId = 0;
@@ -757,7 +758,7 @@ public class KeySetManagerService {
        addRefCountsFromSavedPackagesLPw(keySetRefCounts);
    }

    void readKeysLPw(XmlPullParser parser)
    void readKeysLPw(TypedXmlPullParser parser)
            throws XmlPullParserException, IOException {
        int outerDepth = parser.getDepth();
        int type;
@@ -773,7 +774,7 @@ public class KeySetManagerService {
        }
    }

    void readKeySetListLPw(XmlPullParser parser)
    void readKeySetListLPw(TypedXmlPullParser parser)
            throws XmlPullParserException, IOException {
        int outerDepth = parser.getDepth();
        int type;
@@ -798,7 +799,7 @@ public class KeySetManagerService {
        }
    }

    void readPublicKeyLPw(XmlPullParser parser)
    void readPublicKeyLPw(TypedXmlPullParser parser)
            throws XmlPullParserException {
        String encodedID = parser.getAttributeValue(null, "identifier");
        long identifier = Long.parseLong(encodedID);
+4 −8
Original line number Diff line number Diff line
@@ -71,6 +71,8 @@ import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;
import android.util.TypedXmlPullParser;
import android.util.TypedXmlSerializer;
import android.util.Xml;

import com.android.internal.R;
@@ -78,7 +80,6 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.content.PackageHelper;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.ImageUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.IoThread;
@@ -91,9 +92,7 @@ import com.android.server.pm.permission.PermissionManagerServiceInternal;

import libcore.io.IoUtils;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import java.io.CharArrayWriter;
import java.io.File;
@@ -102,7 +101,6 @@ import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Collections;
@@ -383,8 +381,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
        FileInputStream fis = null;
        try {
            fis = mSessionsFile.openRead();
            final XmlPullParser in = Xml.newPullParser();
            in.setInput(fis, StandardCharsets.UTF_8.name());
            final TypedXmlPullParser in = Xml.resolvePullParser(fis);

            int type;
            while ((type = in.next()) != END_DOCUMENT) {
@@ -467,8 +464,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
        try {
            fos = mSessionsFile.startWrite();

            XmlSerializer out = new FastXmlSerializer();
            out.setOutput(fos, StandardCharsets.UTF_8.name());
            final TypedXmlSerializer out = Xml.resolveSerializer(fos);
            out.startDocument(null, true);
            out.startTag(null, TAG_SESSIONS);
            final int size = mSessions.size();
+9 −7
Original line number Diff line number Diff line
@@ -131,6 +131,8 @@ import android.util.ExceptionUtils;
import android.util.MathUtils;
import android.util.Slog;
import android.util.SparseArray;
import android.util.TypedXmlPullParser;
import android.util.TypedXmlSerializer;
import android.util.apk.ApkSignatureVerifier;

import com.android.internal.R;
@@ -3943,7 +3945,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        }
    }

    private static void writeGrantedRuntimePermissionsLocked(XmlSerializer out,
    private static void writeGrantedRuntimePermissionsLocked(TypedXmlSerializer out,
            String[] grantedRuntimePermissions) throws IOException {
        if (grantedRuntimePermissions != null) {
            for (String permission : grantedRuntimePermissions) {
@@ -3954,7 +3956,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        }
    }

    private static void writeWhitelistedRestrictedPermissionsLocked(@NonNull XmlSerializer out,
    private static void writeWhitelistedRestrictedPermissionsLocked(@NonNull TypedXmlSerializer out,
            @Nullable List<String> whitelistedRestrictedPermissions) throws IOException {
        if (whitelistedRestrictedPermissions != null) {
            final int permissionCount = whitelistedRestrictedPermissions.size();
@@ -3966,7 +3968,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        }
    }

    private static void writeAutoRevokePermissionsMode(@NonNull XmlSerializer out, int mode)
    private static void writeAutoRevokePermissionsMode(@NonNull TypedXmlSerializer out, int mode)
            throws IOException {
        out.startTag(null, TAG_AUTO_REVOKE_PERMISSIONS_MODE);
        writeIntAttribute(out, ATTR_MODE, mode);
@@ -3979,12 +3981,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
    }

    /**
     * Write this session to a {@link XmlSerializer}.
     * Write this session to a {@link TypedXmlSerializer}.
     *
     * @param out Where to write the session to
     * @param sessionsDir The directory containing the sessions
     */
    void write(@NonNull XmlSerializer out, @NonNull File sessionsDir) throws IOException {
    void write(@NonNull TypedXmlSerializer out, @NonNull File sessionsDir) throws IOException {
        synchronized (mLock) {
            if (mDestroyed && !params.isStaged) {
                return;
@@ -4127,7 +4129,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
    }

    /**
     * Read new session from a {@link XmlPullParser xml description} and create it.
     * Read new session from a {@link TypedXmlPullParser xml description} and create it.
     *
     * @param in The source of the description
     * @param callback Callback the session uses to notify about changes of it's state
@@ -4139,7 +4141,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
     * @param sessionProvider
     * @return The newly created session
     */
    public static PackageInstallerSession readFromXml(@NonNull XmlPullParser in,
    public static PackageInstallerSession readFromXml(@NonNull TypedXmlPullParser in,
            @NonNull PackageInstallerService.InternalCallback callback, @NonNull Context context,
            @NonNull PackageManagerService pm, Looper installerThread,
            @NonNull StagingManager stagingManager, @NonNull File sessionsDir,
Loading