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

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

am 7f54ffd0: Merge "Improve configuration of default preferred apps."

# Via Android (Google) Code Review (1) and Dianne Hackborn (1)
* commit '7f54ffd0':
  Improve configuration of default preferred apps.
parents f9fcb188 7f54ffd0
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -210,6 +210,8 @@ interface IPackageManager {
    
    
    List<PackageInfo> getPreferredPackages(int flags);
    List<PackageInfo> getPreferredPackages(int flags);


    void resetPreferredActivities(int userId);

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


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


    private static final int BUFFER_LEN = 8192;
    private static final int BUFFER_LEN = 8192;


    private static String sSpace = "                                                              ";

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


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


    private boolean mIndent = false;
    private boolean mInTag;
    private boolean mInTag;


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

    private void append(char c) throws IOException {
    private void append(char c) throws IOException {
        int pos = mPos;
        int pos = mPos;
        if (pos >= (BUFFER_LEN-1)) {
        if (pos >= (BUFFER_LEN-1)) {
@@ -113,6 +119,14 @@ public class FastXmlSerializer implements XmlSerializer {
        append(str, 0, str.length());
        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 {
    private void escapeAndAppendString(final String string) throws IOException {
        final int N = string.length();
        final int N = string.length();
        final char NE = (char)ESCAPE_TABLE.length;
        final char NE = (char)ESCAPE_TABLE.length;
@@ -161,6 +175,7 @@ public class FastXmlSerializer implements XmlSerializer {


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


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


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


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


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


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


+11 −9
Original line number Original line Diff line number Diff line
@@ -164,9 +164,10 @@ public class PreferredComponent {
        return mParseError;
        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;
        final int NS = mSetClasses != null ? mSetClasses.length : 0;
        serializer.attribute(null, "name", mShortComponent);
        serializer.attribute(null, "name", mShortComponent);
        if (full) {
            if (mMatch != 0) {
            if (mMatch != 0) {
                serializer.attribute(null, "match", Integer.toHexString(mMatch));
                serializer.attribute(null, "match", Integer.toHexString(mMatch));
            }
            }
@@ -177,6 +178,7 @@ public class PreferredComponent {
                serializer.endTag(null, "set");
                serializer.endTag(null, "set");
            }
            }
        }
        }
    }


    public boolean sameSet(List<ResolveInfo> query, int priority) {
    public boolean sameSet(List<ResolveInfo> query, int priority) {
        if (mSetPackages == null) return false;
        if (mSetPackages == null) return false;
+30 −10
Original line number Original line 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 {
public class PackageManagerService extends IPackageManager.Stub {
    static final String TAG = "PackageManager";
    static final String TAG = "PackageManager";
    static final boolean DEBUG_SETTINGS = false;
    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;
    static final boolean DEBUG_UPGRADE = false;
    private static final boolean DEBUG_INSTALL = false;
    private static final boolean DEBUG_INSTALL = false;
    private static final boolean DEBUG_REMOVE = false;
    private static final boolean DEBUG_REMOVE = false;
@@ -1021,7 +1021,7 @@ public class PackageManagerService extends IPackageManager.Stub {


            readPermissions();
            readPermissions();


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


@@ -4967,7 +4967,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        ps.haveGids = true;
        ps.haveGids = true;
    }
    }
    
    
    private final class ActivityIntentResolver
    final class ActivityIntentResolver
            extends IntentResolver<PackageParser.ActivityIntentInfo, ResolveInfo> {
            extends IntentResolver<PackageParser.ActivityIntentInfo, ResolveInfo> {
        public List<ResolveInfo> queryIntent(Intent intent, String resolvedType,
        public List<ResolveInfo> queryIntent(Intent intent, String resolvedType,
                boolean defaultOnly, int userId) {
                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();
                scheduleWriteSettingsLocked();
            }
            }
        }
        }
@@ -8849,7 +8851,8 @@ public class PackageManagerService extends IPackageManager.Stub {
            Iterator<PreferredActivity> it = pir.filterIterator();
            Iterator<PreferredActivity> it = pir.filterIterator();
            while (it.hasNext()) {
            while (it.hasNext()) {
                PreferredActivity pa = it.next();
                PreferredActivity pa = it.next();
                if (pa.mPref.mComponent.getPackageName().equals(packageName)) {
                if (packageName == null ||
                        pa.mPref.mComponent.getPackageName().equals(packageName)) {
                    if (removed == null) {
                    if (removed == null) {
                        removed = new ArrayList<PreferredActivity>();
                        removed = new ArrayList<PreferredActivity>();
                    }
                    }
@@ -8862,12 +8865,24 @@ public class PackageManagerService extends IPackageManager.Stub {
                    pir.removeFilter(pa);
                    pir.removeFilter(pa);
                }
                }
                changed = true;
                changed = true;
                mSettings.writePackageRestrictionsLPr(thisUserId);
            }
            }
        }
        }
        return changed;
        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,
    public int getPreferredActivities(List<IntentFilter> outFilters,
            List<ComponentName> outActivities, String packageName) {
            List<ComponentName> outActivities, String packageName) {


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


        DumpState dumpState = new DumpState();
        DumpState dumpState = new DumpState();
        boolean fullPreferred = false;
        
        
        String packageName = null;
        String packageName = null;
        
        
@@ -9277,7 +9293,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                pw.println("    r[esolvers]: dump intent resolvers");
                pw.println("    r[esolvers]: dump intent resolvers");
                pw.println("    perm[issions]: dump permissions");
                pw.println("    perm[issions]: dump permissions");
                pw.println("    pref[erred]: print preferred package settings");
                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("    prov[iders]: dump content providers");
                pw.println("    p[ackages]: dump installed packages");
                pw.println("    p[ackages]: dump installed packages");
                pw.println("    s[hared-users]: dump shared user IDs");
                pw.println("    s[hared-users]: dump shared user IDs");
@@ -9311,6 +9327,10 @@ public class PackageManagerService extends IPackageManager.Stub {
                dumpState.setDump(DumpState.DUMP_PREFERRED);
                dumpState.setDump(DumpState.DUMP_PREFERRED);
            } else if ("preferred-xml".equals(cmd)) {
            } else if ("preferred-xml".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PREFERRED_XML);
                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)) {
            } else if ("p".equals(cmd) || "packages".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PACKAGES);
                dumpState.setDump(DumpState.DUMP_PACKAGES);
            } else if ("s".equals(cmd) || "shared-users".equals(cmd)) {
            } else if ("s".equals(cmd) || "shared-users".equals(cmd)) {
@@ -9405,7 +9425,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    serializer.startDocument(null, true);
                    serializer.startDocument(null, true);
                    serializer.setFeature(
                    serializer.setFeature(
                            "http://xmlpull.org/v1/doc/features.html#indent-output", true);
                            "http://xmlpull.org/v1/doc/features.html#indent-output", true);
                    mSettings.writePreferredActivitiesLPr(serializer, 0);
                    mSettings.writePreferredActivitiesLPr(serializer, 0, fullPreferred);
                    serializer.endDocument();
                    serializer.endDocument();
                    serializer.flush();
                    serializer.flush();
                } catch (IllegalArgumentException e) {
                } catch (IllegalArgumentException e) {
@@ -10158,7 +10178,7 @@ public class PackageManagerService extends IPackageManager.Stub {
    /** Called by UserManagerService */
    /** Called by UserManagerService */
    void createNewUserLILPw(int userHandle, File path) {
    void createNewUserLILPw(int userHandle, File path) {
        if (mInstaller != null) {
        if (mInstaller != null) {
            mSettings.createNewUserLILPw(mInstaller, userHandle, path);
            mSettings.createNewUserLILPw(this, mInstaller, userHandle, path);
        }
        }
    }
    }


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


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