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

Commit 04919812 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android Git Automerger
Browse files

am 56b3a321: am 1991850d: Merge "Implement issue #6680894: Provide a way to...

am 56b3a321: am 1991850d: Merge "Implement issue #6680894: Provide a way to configure app defaults..." into jb-dev

* commit '56b3a321':
  Implement issue #6680894: Provide a way to configure app defaults...
parents f8fd7ef9 56b3a321
Loading
Loading
Loading
Loading
+40 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.internal.app.IMediaContainerService;
import com.android.internal.app.ResolverActivity;
import com.android.internal.content.NativeLibraryHelper;
import com.android.internal.content.PackageHelper;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.XmlUtils;
import com.android.server.DeviceStorageMonitorService;
import com.android.server.EventLogTags;
@@ -37,6 +38,7 @@ import com.android.server.IntentResolver;

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

import android.app.ActivityManagerNative;
import android.app.IActivityManager;
@@ -110,6 +112,7 @@ import android.util.Xml;
import android.view.Display;
import android.view.WindowManager;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
@@ -8407,6 +8410,10 @@ public class PackageManagerService extends IPackageManager.Stub {

        public static final int DUMP_VERIFIERS = 1 << 8;

        public static final int DUMP_PREFERRED = 1 << 9;

        public static final int DUMP_PREFERRED_XML = 1 << 10;

        public static final int OPTION_SHOW_FILTERS = 1 << 0;

        private int mTypes;
@@ -8418,7 +8425,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        private SharedUserSetting mSharedUser;

        public boolean isDumping(int type) {
            if (mTypes == 0) {
            if (mTypes == 0 && type != DUMP_PREFERRED_XML) {
                return true;
            }

@@ -8495,6 +8502,8 @@ public class PackageManagerService extends IPackageManager.Stub {
                pw.println("    f[ibraries]: list device features");
                pw.println("    r[esolvers]: dump intent resolvers");
                pw.println("    perm[issions]: dump permissions");
                pw.println("    pref[erred]: print preferred package settings");
                pw.println("    preferred-xml: print preferred package settings as xml");
                pw.println("    prov[iders]: dump content providers");
                pw.println("    p[ackages]: dump installed packages");
                pw.println("    s[hared-users]: dump shared user IDs");
@@ -8524,6 +8533,10 @@ public class PackageManagerService extends IPackageManager.Stub {
                dumpState.setDump(DumpState.DUMP_RESOLVERS);
            } else if ("perm".equals(cmd) || "permissions".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PERMISSIONS);
            } else if ("pref".equals(cmd) || "preferred".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PREFERRED);
            } else if ("preferred-xml".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PREFERRED_XML);
            } else if ("p".equals(cmd) || "packages".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PACKAGES);
            } else if ("s".equals(cmd) || "shared-users".equals(cmd)) {
@@ -8592,6 +8605,9 @@ public class PackageManagerService extends IPackageManager.Stub {
                        dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) {
                    dumpState.setTitlePrinted(true);
                }
            }

            if (dumpState.isDumping(DumpState.DUMP_PREFERRED)) {
                if (mSettings.mPreferredActivities.dump(pw,
                        dumpState.getTitlePrinted() ? "\nPreferred Activities:"
                            : "Preferred Activities:", "  ",
@@ -8600,6 +8616,28 @@ public class PackageManagerService extends IPackageManager.Stub {
                }
            }

            if (dumpState.isDumping(DumpState.DUMP_PREFERRED_XML)) {
                pw.flush();
                FileOutputStream fout = new FileOutputStream(fd);
                BufferedOutputStream str = new BufferedOutputStream(fout);
                XmlSerializer serializer = new FastXmlSerializer();
                try {
                    serializer.setOutput(str, "utf-8");
                    serializer.startDocument(null, true);
                    serializer.setFeature(
                            "http://xmlpull.org/v1/doc/features.html#indent-output", true);
                    mSettings.writePreferredActivitiesLPr(serializer);
                    serializer.endDocument();
                    serializer.flush();
                } catch (IllegalArgumentException e) {
                    pw.println("Failed writing: " + e);
                } catch (IllegalStateException e) {
                    pw.println("Failed writing: " + e);
                } catch (IOException e) {
                    pw.println("Failed writing: " + e);
                }
            }

            if (dumpState.isDumping(DumpState.DUMP_PERMISSIONS)) {
                mSettings.dumpPermissionsLPr(pw, packageName, dumpState);
            }
+72 −7
Original line number Diff line number Diff line
@@ -1174,13 +1174,7 @@ final class Settings {
                writeDisabledSysPackageLPr(serializer, pkg);
            }

            serializer.startTag(null, "preferred-activities");
            for (final PreferredActivity pa : mPreferredActivities.filterSet()) {
                serializer.startTag(null, TAG_ITEM);
                pa.writeToXml(serializer);
                serializer.endTag(null, TAG_ITEM);
            }
            serializer.endTag(null, "preferred-activities");
            writePreferredActivitiesLPr(serializer);

            for (final SharedUserSetting usr : mSharedUsers.values()) {
                serializer.startTag(null, "shared-user");
@@ -1306,6 +1300,17 @@ final class Settings {
        //Debug.stopMethodTracing();
    }

    void writePreferredActivitiesLPr(XmlSerializer serializer)
            throws IllegalArgumentException, IllegalStateException, IOException {
        serializer.startTag(null, "preferred-activities");
        for (final PreferredActivity pa : mPreferredActivities.filterSet()) {
            serializer.startTag(null, TAG_ITEM);
            pa.writeToXml(serializer);
            serializer.endTag(null, TAG_ITEM);
        }
        serializer.endTag(null, "preferred-activities");
    }

    void writeDisabledSysPackageLPr(XmlSerializer serializer, final PackageSetting pkg)
            throws java.io.IOException {
        serializer.startTag(null, "updated-package");
@@ -1477,6 +1482,7 @@ final class Settings {
                    mReadMessages.append("No settings file found\n");
                    PackageManagerService.reportSettingsProblem(Log.INFO,
                            "No settings file; creating initial state");
                    readDefaultPreferredAppsLPw();
                    return false;
                }
                str = new FileInputStream(mSettingsFilename);
@@ -1641,6 +1647,65 @@ final class Settings {
        return true;
    }

    private void readDefaultPreferredAppsLPw() {
        // Read preferred apps from .../etc/preferred-apps directory.
        File preferredDir = new File(Environment.getRootDirectory(), "etc/preferred-apps");
        if (!preferredDir.exists() || !preferredDir.isDirectory()) {
            return;
        }
        if (!preferredDir.canRead()) {
            Slog.w(TAG, "Directory " + preferredDir + " cannot be read");
            return;
        }

        // Iterate over the files in the directory and scan .xml files
        for (File f : preferredDir.listFiles()) {
            if (!f.getPath().endsWith(".xml")) {
                Slog.i(TAG, "Non-xml file " + f + " in " + preferredDir + " directory, ignoring");
                continue;
            }
            if (!f.canRead()) {
                Slog.w(TAG, "Preferred apps file " + f + " cannot be read");
                continue;
            }

            FileInputStream str = null;
            try {
                str = new FileInputStream(f);
                XmlPullParser parser = Xml.newPullParser();
                parser.setInput(str, null);

                int type;
                while ((type = parser.next()) != XmlPullParser.START_TAG
                        && type != XmlPullParser.END_DOCUMENT) {
                    ;
                }

                if (type != XmlPullParser.START_TAG) {
                    Slog.w(TAG, "Preferred apps file " + f + " does not have start tag");
                    continue;
                }
                if (!"preferred-activities".equals(parser.getName())) {
                    Slog.w(TAG, "Preferred apps file " + f
                            + " does not start with 'preferred-activities'");
                    continue;
                }
                readPreferredActivitiesLPw(parser);
            } catch (XmlPullParserException e) {
                Slog.w(TAG, "Error reading apps file " + f, e);
            } catch (IOException e) {
                Slog.w(TAG, "Error reading apps file " + f, e);
            } finally {
                if (str != null) {
                    try {
                        str.close();
                    } catch (IOException e) {
                    }
                }
            }
        }
    }

    private int readInt(XmlPullParser parser, String ns, String name, int defValue) {
        String v = parser.getAttributeValue(ns, name);
        try {