summaryrefslogtreecommitdiffstats
path: root/services/core/java/com/android/server/pm/PackageSettingBase.java
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2015-07-10 17:44:53 -0700
committerChristopher Tate <ctate@google.com>2015-07-13 17:01:14 -0700
commitf0d6cb38c47ee37583034dc3a68238ed13c91742 (patch)
tree697334197a4e363bccb6561029bbda7f6adb695a /services/core/java/com/android/server/pm/PackageSettingBase.java
parentc09544bb88ada53494d4a955d0450a22985b4799 (diff)
downloadframeworks_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.java23
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) {