diff options
author | Christopher Tate <ctate@google.com> | 2015-07-10 17:44:53 -0700 |
---|---|---|
committer | Christopher Tate <ctate@google.com> | 2015-07-13 17:01:14 -0700 |
commit | f0d6cb38c47ee37583034dc3a68238ed13c91742 (patch) | |
tree | 697334197a4e363bccb6561029bbda7f6adb695a /services/core/java/com/android/server/pm/PackageSettingBase.java | |
parent | c09544bb88ada53494d4a955d0450a22985b4799 (diff) | |
download | frameworks_base-f0d6cb38c47ee37583034dc3a68238ed13c91742.zip frameworks_base-f0d6cb38c47ee37583034dc3a68238ed13c91742.tar.gz frameworks_base-f0d6cb38c47ee37583034dc3a68238ed13c91742.tar.bz2 |
Prioritize most-recently-enabled link-handling app
In the case when multiple apps handle a given web-link action,
all of which have been marked as "launch the app instead of a
browser" and so are otherwise ambiguous, always prefer the app
that was most recently placed into the always-handle-links state.
Bug 22051035
Change-Id: I3f43c19b0d7b74e9843445e41971bb5433affb1c
Diffstat (limited to 'services/core/java/com/android/server/pm/PackageSettingBase.java')
-rw-r--r-- | services/core/java/com/android/server/pm/PackageSettingBase.java | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java index 6f46f69..4faf75a 100644 --- a/services/core/java/com/android/server/pm/PackageSettingBase.java +++ b/services/core/java/com/android/server/pm/PackageSettingBase.java @@ -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; @@ -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) { @@ -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) { |