Loading core/java/android/content/pm/IntentFilterVerificationInfo.java +22 −6 Original line number Diff line number Diff line Loading @@ -26,7 +26,9 @@ import android.os.Parcelable; import android.text.TextUtils; import android.util.ArraySet; import android.util.Log; import com.android.internal.util.XmlUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; Loading Loading @@ -181,14 +183,28 @@ public final class IntentFilterVerificationInfo implements Parcelable { return getStatusStringFromValue(mMainStatus); } public static String getStatusStringFromValue(int val) { switch (val) { case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK : return "ask"; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS : return "always"; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER : return "never"; public static String getStatusStringFromValue(long val) { StringBuilder sb = new StringBuilder(); switch ((int)(val >> 32)) { case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS: sb.append("always : "); sb.append(Long.toHexString(val & 0x00000000FFFFFFFF)); break; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK: sb.append("ask"); break; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER: sb.append("never"); break; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED: default: case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED : return "undefined"; sb.append("undefined"); break; } return sb.toString(); } @Override Loading core/java/android/content/pm/PackageUserState.java +2 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ public class PackageUserState { public ArraySet<String> enabledComponents; public int domainVerificationStatus; public int appLinkGeneration; public PackageUserState() { installed = true; Loading @@ -60,5 +61,6 @@ public class PackageUserState { ? new ArraySet<>(o.enabledComponents) : null; blockUninstall = o.blockUninstall; domainVerificationStatus = o.domainVerificationStatus; appLinkGeneration = o.appLinkGeneration; } } services/core/java/com/android/server/pm/PackageManagerService.java +24 −13 Original line number Diff line number Diff line Loading @@ -283,7 +283,7 @@ public class PackageManagerService extends IPackageManager.Stub { static final boolean DEBUG_PREFERRED = false; static final boolean DEBUG_UPGRADE = false; static final boolean DEBUG_DOMAIN_VERIFICATION = false; private static final boolean DEBUG_BACKUP = true; private static final boolean DEBUG_BACKUP = false; private static final boolean DEBUG_INSTALL = false; private static final boolean DEBUG_REMOVE = false; private static final boolean DEBUG_BROADCASTS = false; Loading Loading @@ -4580,7 +4580,8 @@ public class PackageManagerService extends IPackageManager.Stub { if (ps == null) { continue; } int status = getDomainVerificationStatusLPr(ps, parentUserId); long verificationState = getDomainVerificationStatusLPr(ps, parentUserId); int status = (int)(verificationState >> 32); if (result == null) { result = new CrossProfileDomainInfo(); result.resolveInfo = Loading Loading @@ -4677,11 +4678,17 @@ public class PackageManagerService extends IPackageManager.Stub { continue; } // Try to get the status from User settings first int status = getDomainVerificationStatusLPr(ps, userId); long packedStatus = getDomainVerificationStatusLPr(ps, userId); int status = (int)(packedStatus >> 32); int linkGeneration = (int)(packedStatus & 0xFFFFFFFF); if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) { if (DEBUG_DOMAIN_VERIFICATION) { Slog.i(TAG, " + always: " + info.activityInfo.packageName); Slog.i(TAG, " + always: " + info.activityInfo.packageName + " : linkgen=" + linkGeneration); } // Use link-enabled generation as preferredOrder, i.e. // prefer newly-enabled over earlier-enabled. info.preferredOrder = linkGeneration; alwaysList.add(info); } else if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER) { if (DEBUG_DOMAIN_VERIFICATION) { Loading @@ -4697,7 +4704,7 @@ public class PackageManagerService extends IPackageManager.Stub { } } } // First try to add the "always" resolution for the current user if there is any // First try to add the "always" resolution(s) for the current user, if any if (alwaysList.size() > 0) { result.addAll(alwaysList); // if there is an "always" for the parent user, add it. Loading Loading @@ -4758,15 +4765,19 @@ public class PackageManagerService extends IPackageManager.Stub { return result; } private int getDomainVerificationStatusLPr(PackageSetting ps, int userId) { int status = ps.getDomainVerificationStatusForUser(userId); // Returns a packed value as a long: // // high 'int'-sized word: link status: undefined/ask/never/always. // low 'int'-sized word: relative priority among 'always' results. private long getDomainVerificationStatusLPr(PackageSetting ps, int userId) { long result = ps.getDomainVerificationStatusForUser(userId); // if none available, get the master status if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { if (result >> 32 == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { if (ps.getIntentFilterVerificationInfo() != null) { status = ps.getIntentFilterVerificationInfo().getStatus(); result = ((long)ps.getIntentFilterVerificationInfo().getStatus()) << 32; } } return status; return result; } private ResolveInfo querySkipCurrentProfileIntents( Loading Loading @@ -12962,7 +12973,7 @@ public class PackageManagerService extends IPackageManager.Stub { false, //hidden null, null, null, false, // blockUninstall INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED); INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED, 0); if (!isSystemApp(ps)) { if (ps.isAnyInstalled(sUserManager.getUserIds())) { // Other user still have this package installed, so all Loading Loading @@ -14885,8 +14896,8 @@ public class PackageManagerService extends IPackageManager.Stub { pw.println(); count = 0; for (PackageSetting ps : allPackageSettings) { final int status = ps.getDomainVerificationStatusForUser(userId); if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { final long status = ps.getDomainVerificationStatusForUser(userId); if (status >> 32 == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { continue; } pw.println(prefix + "Package: " + ps.name); services/core/java/com/android/server/pm/PackageSettingBase.java +18 −5 Original line number Diff line number Diff line Loading @@ -341,7 +341,8 @@ abstract class PackageSettingBase extends SettingBase { void setUserState(int userId, int enabled, boolean installed, boolean stopped, boolean notLaunched, boolean hidden, String lastDisableAppCaller, ArraySet<String> enabledComponents, ArraySet<String> disabledComponents, boolean blockUninstall, int domainVerifState) { ArraySet<String> disabledComponents, boolean blockUninstall, int domainVerifState, int linkGeneration) { PackageUserState state = modifyUserState(userId); state.enabled = enabled; state.installed = installed; Loading @@ -353,6 +354,7 @@ abstract class PackageSettingBase extends SettingBase { state.disabledComponents = disabledComponents; state.blockUninstall = blockUninstall; state.domainVerificationStatus = domainVerifState; state.appLinkGeneration = linkGeneration; } ArraySet<String> getEnabledComponents(int userId) { Loading Loading @@ -449,12 +451,23 @@ abstract class PackageSettingBase extends SettingBase { verificationInfo = info; } int getDomainVerificationStatusForUser(int userId) { return readUserState(userId).domainVerificationStatus; // Returns a packed value as a long: // // high 'int'-sized word: link status: undefined/ask/never/always. // low 'int'-sized word: relative priority among 'always' results. long getDomainVerificationStatusForUser(int userId) { PackageUserState state = readUserState(userId); long result = (long) state.appLinkGeneration; result |= ((long) state.domainVerificationStatus) << 32; return result; } void setDomainVerificationStatusForUser(int status, int userId) { modifyUserState(userId).domainVerificationStatus = status; void setDomainVerificationStatusForUser(final int status, int generation, int userId) { PackageUserState state = modifyUserState(userId); state.domainVerificationStatus = status; if (status == PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) { state.appLinkGeneration = generation; } } void clearDomainVerificationStatusForUser(int userId) { Loading services/core/java/com/android/server/pm/Settings.java +33 −6 Original line number Diff line number Diff line Loading @@ -87,6 +87,7 @@ import android.util.ArraySet; import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.util.SparseIntArray; import android.util.Xml; import java.io.BufferedOutputStream; Loading Loading @@ -196,6 +197,7 @@ final class Settings { private static final String ATTR_DOMAIN_VERIFICATON_STATE = "domainVerificationStatus"; private static final String ATTR_PACKAGE_NAME= "packageName"; private static final String ATTR_FINGERPRINT = "fingerprint"; private static final String ATTR_APP_LINK_GENERATION = "app-link-generation"; private final Object mLock; Loading Loading @@ -294,6 +296,9 @@ final class Settings { // For every user, it is used to find the package name of the default Browser App. final SparseArray<String> mDefaultBrowserApp = new SparseArray<String>(); // App-link priority tracking, per-user final SparseIntArray mNextAppLinkGeneration = new SparseIntArray(); final StringBuilder mReadMessages = new StringBuilder(); /** Loading Loading @@ -624,7 +629,7 @@ final class Settings { false, // hidden null, null, null, false, // blockUninstall INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED); INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED, 0); writePackageRestrictionsLPr(user.id); } } Loading Loading @@ -1051,7 +1056,7 @@ final class Settings { } return INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED; } int status = ps.getDomainVerificationStatusForUser(userId); int status = (int)(ps.getDomainVerificationStatusForUser(userId) >> 32); if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { if (ps.getIntentFilterVerificationInfo() != null) { status = ps.getIntentFilterVerificationInfo().getStatus(); Loading @@ -1060,7 +1065,7 @@ final class Settings { return status; } boolean updateIntentFilterVerificationStatusLPw(String packageName, int status, int userId) { boolean updateIntentFilterVerificationStatusLPw(String packageName, final int status, int userId) { // Update the status for the current package PackageSetting current = mPackages.get(packageName); if (current == null) { Loading @@ -1070,7 +1075,15 @@ final class Settings { return false; } current.setDomainVerificationStatusForUser(status, userId); final int alwaysGeneration; if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) { alwaysGeneration = mNextAppLinkGeneration.get(userId) + 1; mNextAppLinkGeneration.put(userId, alwaysGeneration); } else { alwaysGeneration = 0; } current.setDomainVerificationStatusForUser(status, alwaysGeneration, userId); return true; } Loading Loading @@ -1382,7 +1395,7 @@ final class Settings { false, // hidden null, null, null, false, // blockUninstall INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED); INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED, 0); } return; } Loading @@ -1404,6 +1417,8 @@ final class Settings { return; } int maxAppLinkGeneration = 0; int outerDepth = parser.getDepth(); PackageSetting ps = null; while ((type=parser.next()) != XmlPullParser.END_DOCUMENT Loading Loading @@ -1457,6 +1472,12 @@ final class Settings { PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED : Integer.parseInt(verifStateStr); final String linkGenStr = parser.getAttributeValue(null, ATTR_APP_LINK_GENERATION); final int linkGeneration = linkGenStr == null ? 0 : Integer.parseInt(linkGenStr); if (linkGeneration > maxAppLinkGeneration) { maxAppLinkGeneration = linkGeneration; } ArraySet<String> enabledComponents = null; ArraySet<String> disabledComponents = null; Loading @@ -1478,7 +1499,7 @@ final class Settings { ps.setUserState(userId, enabled, installed, stopped, notLaunched, hidden, enabledCaller, enabledComponents, disabledComponents, blockUninstall, verifState); verifState, linkGeneration); } else if (tagName.equals("preferred-activities")) { readPreferredActivitiesLPw(parser, userId); } else if (tagName.equals(TAG_PERSISTENT_PREFERRED_ACTIVITIES)) { Loading @@ -1496,6 +1517,8 @@ final class Settings { str.close(); mNextAppLinkGeneration.put(userId, maxAppLinkGeneration + 1); } catch (XmlPullParserException e) { mReadMessages.append("Error reading: " + e.toString()); PackageManagerService.reportSettingsProblem(Log.ERROR, Loading Loading @@ -1749,6 +1772,10 @@ final class Settings { serializer.attribute(null, ATTR_DOMAIN_VERIFICATON_STATE, Integer.toString(ustate.domainVerificationStatus)); } if (ustate.appLinkGeneration != 0) { serializer.attribute(null, ATTR_APP_LINK_GENERATION, Integer.toString(ustate.appLinkGeneration)); } if (ustate.enabledComponents != null && ustate.enabledComponents.size() > 0) { serializer.startTag(null, TAG_ENABLED_COMPONENTS); Loading Loading
core/java/android/content/pm/IntentFilterVerificationInfo.java +22 −6 Original line number Diff line number Diff line Loading @@ -26,7 +26,9 @@ import android.os.Parcelable; import android.text.TextUtils; import android.util.ArraySet; import android.util.Log; import com.android.internal.util.XmlUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; Loading Loading @@ -181,14 +183,28 @@ public final class IntentFilterVerificationInfo implements Parcelable { return getStatusStringFromValue(mMainStatus); } public static String getStatusStringFromValue(int val) { switch (val) { case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK : return "ask"; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS : return "always"; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER : return "never"; public static String getStatusStringFromValue(long val) { StringBuilder sb = new StringBuilder(); switch ((int)(val >> 32)) { case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS: sb.append("always : "); sb.append(Long.toHexString(val & 0x00000000FFFFFFFF)); break; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK: sb.append("ask"); break; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER: sb.append("never"); break; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED: default: case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED : return "undefined"; sb.append("undefined"); break; } return sb.toString(); } @Override Loading
core/java/android/content/pm/PackageUserState.java +2 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ public class PackageUserState { public ArraySet<String> enabledComponents; public int domainVerificationStatus; public int appLinkGeneration; public PackageUserState() { installed = true; Loading @@ -60,5 +61,6 @@ public class PackageUserState { ? new ArraySet<>(o.enabledComponents) : null; blockUninstall = o.blockUninstall; domainVerificationStatus = o.domainVerificationStatus; appLinkGeneration = o.appLinkGeneration; } }
services/core/java/com/android/server/pm/PackageManagerService.java +24 −13 Original line number Diff line number Diff line Loading @@ -283,7 +283,7 @@ public class PackageManagerService extends IPackageManager.Stub { static final boolean DEBUG_PREFERRED = false; static final boolean DEBUG_UPGRADE = false; static final boolean DEBUG_DOMAIN_VERIFICATION = false; private static final boolean DEBUG_BACKUP = true; private static final boolean DEBUG_BACKUP = false; private static final boolean DEBUG_INSTALL = false; private static final boolean DEBUG_REMOVE = false; private static final boolean DEBUG_BROADCASTS = false; Loading Loading @@ -4580,7 +4580,8 @@ public class PackageManagerService extends IPackageManager.Stub { if (ps == null) { continue; } int status = getDomainVerificationStatusLPr(ps, parentUserId); long verificationState = getDomainVerificationStatusLPr(ps, parentUserId); int status = (int)(verificationState >> 32); if (result == null) { result = new CrossProfileDomainInfo(); result.resolveInfo = Loading Loading @@ -4677,11 +4678,17 @@ public class PackageManagerService extends IPackageManager.Stub { continue; } // Try to get the status from User settings first int status = getDomainVerificationStatusLPr(ps, userId); long packedStatus = getDomainVerificationStatusLPr(ps, userId); int status = (int)(packedStatus >> 32); int linkGeneration = (int)(packedStatus & 0xFFFFFFFF); if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) { if (DEBUG_DOMAIN_VERIFICATION) { Slog.i(TAG, " + always: " + info.activityInfo.packageName); Slog.i(TAG, " + always: " + info.activityInfo.packageName + " : linkgen=" + linkGeneration); } // Use link-enabled generation as preferredOrder, i.e. // prefer newly-enabled over earlier-enabled. info.preferredOrder = linkGeneration; alwaysList.add(info); } else if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER) { if (DEBUG_DOMAIN_VERIFICATION) { Loading @@ -4697,7 +4704,7 @@ public class PackageManagerService extends IPackageManager.Stub { } } } // First try to add the "always" resolution for the current user if there is any // First try to add the "always" resolution(s) for the current user, if any if (alwaysList.size() > 0) { result.addAll(alwaysList); // if there is an "always" for the parent user, add it. Loading Loading @@ -4758,15 +4765,19 @@ public class PackageManagerService extends IPackageManager.Stub { return result; } private int getDomainVerificationStatusLPr(PackageSetting ps, int userId) { int status = ps.getDomainVerificationStatusForUser(userId); // Returns a packed value as a long: // // high 'int'-sized word: link status: undefined/ask/never/always. // low 'int'-sized word: relative priority among 'always' results. private long getDomainVerificationStatusLPr(PackageSetting ps, int userId) { long result = ps.getDomainVerificationStatusForUser(userId); // if none available, get the master status if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { if (result >> 32 == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { if (ps.getIntentFilterVerificationInfo() != null) { status = ps.getIntentFilterVerificationInfo().getStatus(); result = ((long)ps.getIntentFilterVerificationInfo().getStatus()) << 32; } } return status; return result; } private ResolveInfo querySkipCurrentProfileIntents( Loading Loading @@ -12962,7 +12973,7 @@ public class PackageManagerService extends IPackageManager.Stub { false, //hidden null, null, null, false, // blockUninstall INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED); INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED, 0); if (!isSystemApp(ps)) { if (ps.isAnyInstalled(sUserManager.getUserIds())) { // Other user still have this package installed, so all Loading Loading @@ -14885,8 +14896,8 @@ public class PackageManagerService extends IPackageManager.Stub { pw.println(); count = 0; for (PackageSetting ps : allPackageSettings) { final int status = ps.getDomainVerificationStatusForUser(userId); if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { final long status = ps.getDomainVerificationStatusForUser(userId); if (status >> 32 == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { continue; } pw.println(prefix + "Package: " + ps.name);
services/core/java/com/android/server/pm/PackageSettingBase.java +18 −5 Original line number Diff line number Diff line Loading @@ -341,7 +341,8 @@ abstract class PackageSettingBase extends SettingBase { void setUserState(int userId, int enabled, boolean installed, boolean stopped, boolean notLaunched, boolean hidden, String lastDisableAppCaller, ArraySet<String> enabledComponents, ArraySet<String> disabledComponents, boolean blockUninstall, int domainVerifState) { ArraySet<String> disabledComponents, boolean blockUninstall, int domainVerifState, int linkGeneration) { PackageUserState state = modifyUserState(userId); state.enabled = enabled; state.installed = installed; Loading @@ -353,6 +354,7 @@ abstract class PackageSettingBase extends SettingBase { state.disabledComponents = disabledComponents; state.blockUninstall = blockUninstall; state.domainVerificationStatus = domainVerifState; state.appLinkGeneration = linkGeneration; } ArraySet<String> getEnabledComponents(int userId) { Loading Loading @@ -449,12 +451,23 @@ abstract class PackageSettingBase extends SettingBase { verificationInfo = info; } int getDomainVerificationStatusForUser(int userId) { return readUserState(userId).domainVerificationStatus; // Returns a packed value as a long: // // high 'int'-sized word: link status: undefined/ask/never/always. // low 'int'-sized word: relative priority among 'always' results. long getDomainVerificationStatusForUser(int userId) { PackageUserState state = readUserState(userId); long result = (long) state.appLinkGeneration; result |= ((long) state.domainVerificationStatus) << 32; return result; } void setDomainVerificationStatusForUser(int status, int userId) { modifyUserState(userId).domainVerificationStatus = status; void setDomainVerificationStatusForUser(final int status, int generation, int userId) { PackageUserState state = modifyUserState(userId); state.domainVerificationStatus = status; if (status == PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) { state.appLinkGeneration = generation; } } void clearDomainVerificationStatusForUser(int userId) { Loading
services/core/java/com/android/server/pm/Settings.java +33 −6 Original line number Diff line number Diff line Loading @@ -87,6 +87,7 @@ import android.util.ArraySet; import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.util.SparseIntArray; import android.util.Xml; import java.io.BufferedOutputStream; Loading Loading @@ -196,6 +197,7 @@ final class Settings { private static final String ATTR_DOMAIN_VERIFICATON_STATE = "domainVerificationStatus"; private static final String ATTR_PACKAGE_NAME= "packageName"; private static final String ATTR_FINGERPRINT = "fingerprint"; private static final String ATTR_APP_LINK_GENERATION = "app-link-generation"; private final Object mLock; Loading Loading @@ -294,6 +296,9 @@ final class Settings { // For every user, it is used to find the package name of the default Browser App. final SparseArray<String> mDefaultBrowserApp = new SparseArray<String>(); // App-link priority tracking, per-user final SparseIntArray mNextAppLinkGeneration = new SparseIntArray(); final StringBuilder mReadMessages = new StringBuilder(); /** Loading Loading @@ -624,7 +629,7 @@ final class Settings { false, // hidden null, null, null, false, // blockUninstall INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED); INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED, 0); writePackageRestrictionsLPr(user.id); } } Loading Loading @@ -1051,7 +1056,7 @@ final class Settings { } return INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED; } int status = ps.getDomainVerificationStatusForUser(userId); int status = (int)(ps.getDomainVerificationStatusForUser(userId) >> 32); if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) { if (ps.getIntentFilterVerificationInfo() != null) { status = ps.getIntentFilterVerificationInfo().getStatus(); Loading @@ -1060,7 +1065,7 @@ final class Settings { return status; } boolean updateIntentFilterVerificationStatusLPw(String packageName, int status, int userId) { boolean updateIntentFilterVerificationStatusLPw(String packageName, final int status, int userId) { // Update the status for the current package PackageSetting current = mPackages.get(packageName); if (current == null) { Loading @@ -1070,7 +1075,15 @@ final class Settings { return false; } current.setDomainVerificationStatusForUser(status, userId); final int alwaysGeneration; if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) { alwaysGeneration = mNextAppLinkGeneration.get(userId) + 1; mNextAppLinkGeneration.put(userId, alwaysGeneration); } else { alwaysGeneration = 0; } current.setDomainVerificationStatusForUser(status, alwaysGeneration, userId); return true; } Loading Loading @@ -1382,7 +1395,7 @@ final class Settings { false, // hidden null, null, null, false, // blockUninstall INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED); INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED, 0); } return; } Loading @@ -1404,6 +1417,8 @@ final class Settings { return; } int maxAppLinkGeneration = 0; int outerDepth = parser.getDepth(); PackageSetting ps = null; while ((type=parser.next()) != XmlPullParser.END_DOCUMENT Loading Loading @@ -1457,6 +1472,12 @@ final class Settings { PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED : Integer.parseInt(verifStateStr); final String linkGenStr = parser.getAttributeValue(null, ATTR_APP_LINK_GENERATION); final int linkGeneration = linkGenStr == null ? 0 : Integer.parseInt(linkGenStr); if (linkGeneration > maxAppLinkGeneration) { maxAppLinkGeneration = linkGeneration; } ArraySet<String> enabledComponents = null; ArraySet<String> disabledComponents = null; Loading @@ -1478,7 +1499,7 @@ final class Settings { ps.setUserState(userId, enabled, installed, stopped, notLaunched, hidden, enabledCaller, enabledComponents, disabledComponents, blockUninstall, verifState); verifState, linkGeneration); } else if (tagName.equals("preferred-activities")) { readPreferredActivitiesLPw(parser, userId); } else if (tagName.equals(TAG_PERSISTENT_PREFERRED_ACTIVITIES)) { Loading @@ -1496,6 +1517,8 @@ final class Settings { str.close(); mNextAppLinkGeneration.put(userId, maxAppLinkGeneration + 1); } catch (XmlPullParserException e) { mReadMessages.append("Error reading: " + e.toString()); PackageManagerService.reportSettingsProblem(Log.ERROR, Loading Loading @@ -1749,6 +1772,10 @@ final class Settings { serializer.attribute(null, ATTR_DOMAIN_VERIFICATON_STATE, Integer.toString(ustate.domainVerificationStatus)); } if (ustate.appLinkGeneration != 0) { serializer.attribute(null, ATTR_APP_LINK_GENERATION, Integer.toString(ustate.appLinkGeneration)); } if (ustate.enabledComponents != null && ustate.enabledComponents.size() > 0) { serializer.startTag(null, TAG_ENABLED_COMPONENTS); Loading