Loading core/java/android/content/pm/IPackageManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading core/java/com/android/internal/util/FastXmlSerializer.java +33 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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)) { Loading Loading @@ -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; Loading Loading @@ -161,6 +175,7 @@ public class FastXmlSerializer implements XmlSerializer { escapeAndAppendString(value); append('"'); mLineStart = false; return this; } Loading @@ -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); Loading @@ -196,6 +215,7 @@ public class FastXmlSerializer implements XmlSerializer { append(name); append(">\n"); } mLineStart = true; mInTag = false; return this; } Loading Loading @@ -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(); Loading Loading @@ -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, Loading @@ -332,6 +354,10 @@ public class FastXmlSerializer implements XmlSerializer { if (mInTag) { append(">\n"); } if (mIndent) { appendIndent(mNesting); } mNesting++; append('<'); if (namespace != null) { append(namespace); Loading @@ -339,6 +365,7 @@ public class FastXmlSerializer implements XmlSerializer { } append(name); mInTag = true; mLineStart = false; return this; } Loading @@ -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; } Loading @@ -359,6 +389,9 @@ public class FastXmlSerializer implements XmlSerializer { mInTag = false; } escapeAndAppendString(text); if (mIndent) { mLineStart = text.charAt(text.length()-1) == '\n'; } return this; } Loading services/java/com/android/server/PreferredComponent.java +11 −9 Original line number Diff line number Diff line Loading @@ -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)); } Loading @@ -177,6 +178,7 @@ public class PreferredComponent { serializer.endTag(null, "set"); } } } public boolean sameSet(List<ResolveInfo> query, int priority) { if (mSetPackages == null) return false; Loading services/java/com/android/server/pm/PackageManagerService.java +30 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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) { Loading Loading @@ -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(); } } Loading @@ -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>(); } Loading @@ -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) { Loading Loading @@ -9254,6 +9269,7 @@ public class PackageManagerService extends IPackageManager.Stub { } DumpState dumpState = new DumpState(); boolean fullPreferred = false; String packageName = null; Loading @@ -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"); Loading Loading @@ -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)) { Loading Loading @@ -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) { Loading Loading @@ -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); } } Loading services/java/com/android/server/pm/PreferredActivity.java +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
core/java/android/content/pm/IPackageManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
core/java/com/android/internal/util/FastXmlSerializer.java +33 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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)) { Loading Loading @@ -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; Loading Loading @@ -161,6 +175,7 @@ public class FastXmlSerializer implements XmlSerializer { escapeAndAppendString(value); append('"'); mLineStart = false; return this; } Loading @@ -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); Loading @@ -196,6 +215,7 @@ public class FastXmlSerializer implements XmlSerializer { append(name); append(">\n"); } mLineStart = true; mInTag = false; return this; } Loading Loading @@ -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(); Loading Loading @@ -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, Loading @@ -332,6 +354,10 @@ public class FastXmlSerializer implements XmlSerializer { if (mInTag) { append(">\n"); } if (mIndent) { appendIndent(mNesting); } mNesting++; append('<'); if (namespace != null) { append(namespace); Loading @@ -339,6 +365,7 @@ public class FastXmlSerializer implements XmlSerializer { } append(name); mInTag = true; mLineStart = false; return this; } Loading @@ -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; } Loading @@ -359,6 +389,9 @@ public class FastXmlSerializer implements XmlSerializer { mInTag = false; } escapeAndAppendString(text); if (mIndent) { mLineStart = text.charAt(text.length()-1) == '\n'; } return this; } Loading
services/java/com/android/server/PreferredComponent.java +11 −9 Original line number Diff line number Diff line Loading @@ -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)); } Loading @@ -177,6 +178,7 @@ public class PreferredComponent { serializer.endTag(null, "set"); } } } public boolean sameSet(List<ResolveInfo> query, int priority) { if (mSetPackages == null) return false; Loading
services/java/com/android/server/pm/PackageManagerService.java +30 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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) { Loading Loading @@ -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(); } } Loading @@ -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>(); } Loading @@ -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) { Loading Loading @@ -9254,6 +9269,7 @@ public class PackageManagerService extends IPackageManager.Stub { } DumpState dumpState = new DumpState(); boolean fullPreferred = false; String packageName = null; Loading @@ -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"); Loading Loading @@ -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)) { Loading Loading @@ -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) { Loading Loading @@ -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); } } Loading
services/java/com/android/server/pm/PreferredActivity.java +2 −2 Original line number Diff line number Diff line Loading @@ -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