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

Commit 7f54ffd0 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "Improve configuration of default preferred apps."

parents 6fc73697 8a2ed1d7
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -210,6 +210,8 @@ interface IPackageManager {
    
    List<PackageInfo> getPreferredPackages(int flags);

    void resetPreferredActivities(int userId);

    void addPreferredActivity(in IntentFilter filter, int match,
            in ComponentName[] set, in ComponentName activity, int userId);

+33 −0
Original line number Diff line number Diff line
@@ -50,6 +50,8 @@ public class FastXmlSerializer implements XmlSerializer {

    private static final int BUFFER_LEN = 8192;

    private static String sSpace = "                                                              ";

    private final char[] mText = new char[BUFFER_LEN];
    private int mPos;

@@ -59,8 +61,12 @@ public class FastXmlSerializer implements XmlSerializer {
    private CharsetEncoder mCharset;
    private ByteBuffer mBytes = ByteBuffer.allocate(BUFFER_LEN);

    private boolean mIndent = false;
    private boolean mInTag;

    private int mNesting = 0;
    private boolean mLineStart = true;

    private void append(char c) throws IOException {
        int pos = mPos;
        if (pos >= (BUFFER_LEN-1)) {
@@ -113,6 +119,14 @@ public class FastXmlSerializer implements XmlSerializer {
        append(str, 0, str.length());
    }

    private void appendIndent(int indent) throws IOException {
        indent *= 4;
        if (indent > sSpace.length()) {
            indent = sSpace.length();
        }
        append(sSpace, 0, indent);
    }

    private void escapeAndAppendString(final String string) throws IOException {
        final int N = string.length();
        final char NE = (char)ESCAPE_TABLE.length;
@@ -161,6 +175,7 @@ public class FastXmlSerializer implements XmlSerializer {

        escapeAndAppendString(value);
        append('"');
        mLineStart = false;
        return this;
    }

@@ -185,9 +200,13 @@ public class FastXmlSerializer implements XmlSerializer {

    public XmlSerializer endTag(String namespace, String name) throws IOException,
            IllegalArgumentException, IllegalStateException {
        mNesting--;
        if (mInTag) {
            append(" />\n");
        } else {
            if (mIndent && mLineStart) {
                appendIndent(mNesting);
            }
            append("</");
            if (namespace != null) {
                append(namespace);
@@ -196,6 +215,7 @@ public class FastXmlSerializer implements XmlSerializer {
            append(name);
            append(">\n");
        }
        mLineStart = true;
        mInTag = false;
        return this;
    }
@@ -278,6 +298,7 @@ public class FastXmlSerializer implements XmlSerializer {
    public void setFeature(String name, boolean state) throws IllegalArgumentException,
            IllegalStateException {
        if (name.equals("http://xmlpull.org/v1/doc/features.html#indent-output")) {
            mIndent = true;
            return;
        }
        throw new UnsupportedOperationException();
@@ -325,6 +346,7 @@ public class FastXmlSerializer implements XmlSerializer {
            IllegalArgumentException, IllegalStateException {
        append("<?xml version='1.0' encoding='utf-8' standalone='"
                + (standalone ? "yes" : "no") + "' ?>\n");
        mLineStart = true;
    }

    public XmlSerializer startTag(String namespace, String name) throws IOException,
@@ -332,6 +354,10 @@ public class FastXmlSerializer implements XmlSerializer {
        if (mInTag) {
            append(">\n");
        }
        if (mIndent) {
            appendIndent(mNesting);
        }
        mNesting++;
        append('<');
        if (namespace != null) {
            append(namespace);
@@ -339,6 +365,7 @@ public class FastXmlSerializer implements XmlSerializer {
        }
        append(name);
        mInTag = true;
        mLineStart = false;
        return this;
    }

@@ -349,6 +376,9 @@ public class FastXmlSerializer implements XmlSerializer {
            mInTag = false;
        }
        escapeAndAppendString(buf, start, len);
        if (mIndent) {
            mLineStart = buf[start+len-1] == '\n';
        }
        return this;
    }

@@ -359,6 +389,9 @@ public class FastXmlSerializer implements XmlSerializer {
            mInTag = false;
        }
        escapeAndAppendString(text);
        if (mIndent) {
            mLineStart = text.charAt(text.length()-1) == '\n';
        }
        return this;
    }

+11 −9
Original line number Diff line number Diff line
@@ -164,9 +164,10 @@ public class PreferredComponent {
        return mParseError;
    }

    public void writeToXml(XmlSerializer serializer) throws IOException {
    public void writeToXml(XmlSerializer serializer, boolean full) throws IOException {
        final int NS = mSetClasses != null ? mSetClasses.length : 0;
        serializer.attribute(null, "name", mShortComponent);
        if (full) {
            if (mMatch != 0) {
                serializer.attribute(null, "match", Integer.toHexString(mMatch));
            }
@@ -177,6 +178,7 @@ public class PreferredComponent {
                serializer.endTag(null, "set");
            }
        }
    }

    public boolean sameSet(List<ResolveInfo> query, int priority) {
        if (mSetPackages == null) return false;
+30 −10
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ adb shell am instrument -w -e class com.android.unit_tests.PackageManagerTests c
public class PackageManagerService extends IPackageManager.Stub {
    static final String TAG = "PackageManager";
    static final boolean DEBUG_SETTINGS = false;
    private static final boolean DEBUG_PREFERRED = false;
    static final boolean DEBUG_PREFERRED = true;
    static final boolean DEBUG_UPGRADE = false;
    private static final boolean DEBUG_INSTALL = false;
    private static final boolean DEBUG_REMOVE = false;
@@ -1021,7 +1021,7 @@ public class PackageManagerService extends IPackageManager.Stub {

            readPermissions();

            mRestoredSettings = mSettings.readLPw(sUserManager.getUsers(false),
            mRestoredSettings = mSettings.readLPw(this, sUserManager.getUsers(false),
                    mSdkVersion, mOnlyCore);
            long startTime = SystemClock.uptimeMillis();

@@ -4967,7 +4967,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        ps.haveGids = true;
    }
    
    private final class ActivityIntentResolver
    final class ActivityIntentResolver
            extends IntentResolver<PackageParser.ActivityIntentInfo, ResolveInfo> {
        public List<ResolveInfo> queryIntent(Intent intent, String resolvedType,
                boolean defaultOnly, int userId) {
@@ -8830,7 +8830,9 @@ public class PackageManagerService extends IPackageManager.Stub {
                }
            }

            if (clearPackagePreferredActivitiesLPw(packageName, UserHandle.getCallingUserId())) {
            int user = UserHandle.getCallingUserId();
            if (clearPackagePreferredActivitiesLPw(packageName, user)) {
                mSettings.writePackageRestrictionsLPr(user);
                scheduleWriteSettingsLocked();
            }
        }
@@ -8849,7 +8851,8 @@ public class PackageManagerService extends IPackageManager.Stub {
            Iterator<PreferredActivity> it = pir.filterIterator();
            while (it.hasNext()) {
                PreferredActivity pa = it.next();
                if (pa.mPref.mComponent.getPackageName().equals(packageName)) {
                if (packageName == null ||
                        pa.mPref.mComponent.getPackageName().equals(packageName)) {
                    if (removed == null) {
                        removed = new ArrayList<PreferredActivity>();
                    }
@@ -8862,12 +8865,24 @@ public class PackageManagerService extends IPackageManager.Stub {
                    pir.removeFilter(pa);
                }
                changed = true;
                mSettings.writePackageRestrictionsLPr(thisUserId);
            }
        }
        return changed;
    }

    public void resetPreferredActivities(int userId) {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
        // writer
        synchronized (mPackages) {
            int user = UserHandle.getCallingUserId();
            clearPackagePreferredActivitiesLPw(null, user);
            mSettings.readDefaultPreferredAppsLPw(this, user);
            mSettings.writePackageRestrictionsLPr(user);
            scheduleWriteSettingsLocked();
        }
    }

    public int getPreferredActivities(List<IntentFilter> outFilters,
            List<ComponentName> outActivities, String packageName) {

@@ -9254,6 +9269,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        }

        DumpState dumpState = new DumpState();
        boolean fullPreferred = false;
        
        String packageName = null;
        
@@ -9277,7 +9293,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                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("    preferred-xml [--full]: 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");
@@ -9311,6 +9327,10 @@ public class PackageManagerService extends IPackageManager.Stub {
                dumpState.setDump(DumpState.DUMP_PREFERRED);
            } else if ("preferred-xml".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PREFERRED_XML);
                opti++;
                if (opti < args.length && "--full".equals(args[opti])) {
                    fullPreferred = true;
                }
            } else if ("p".equals(cmd) || "packages".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PACKAGES);
            } else if ("s".equals(cmd) || "shared-users".equals(cmd)) {
@@ -9405,7 +9425,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    serializer.startDocument(null, true);
                    serializer.setFeature(
                            "http://xmlpull.org/v1/doc/features.html#indent-output", true);
                    mSettings.writePreferredActivitiesLPr(serializer, 0);
                    mSettings.writePreferredActivitiesLPr(serializer, 0, fullPreferred);
                    serializer.endDocument();
                    serializer.flush();
                } catch (IllegalArgumentException e) {
@@ -10158,7 +10178,7 @@ public class PackageManagerService extends IPackageManager.Stub {
    /** Called by UserManagerService */
    void createNewUserLILPw(int userHandle, File path) {
        if (mInstaller != null) {
            mSettings.createNewUserLILPw(mInstaller, userHandle, path);
            mSettings.createNewUserLILPw(this, mInstaller, userHandle, path);
        }
    }

+2 −2
Original line number Diff line number Diff line
@@ -46,8 +46,8 @@ class PreferredActivity extends IntentFilter implements PreferredComponent.Callb
        mPref = new PreferredComponent(this, parser);
    }

    public void writeToXml(XmlSerializer serializer) throws IOException {
        mPref.writeToXml(serializer);
    public void writeToXml(XmlSerializer serializer, boolean full) throws IOException {
        mPref.writeToXml(serializer, full);
        serializer.startTag(null, "filter");
            super.writeToXml(serializer);
        serializer.endTag(null, "filter");
Loading