OSDN Git Service

Cross profile candidate should be considered
authorTony Mak <tonymak@google.com>
Wed, 2 Nov 2016 10:26:45 +0000 (10:26 +0000)
committerTony Mak <tonymak@google.com>
Wed, 2 Nov 2016 10:26:45 +0000 (10:26 +0000)
Bug: 32547783

Fixed the regression introduced in ag/1243573

Test: Manual test - Open a map link in work calendar, personal map is shown as an option.

Change-Id: If5651b5e09cf1916813e8f91dbdcdf53f9119ef2

services/core/java/com/android/server/pm/PackageManagerService.java

index 974d95d..8063939 100644 (file)
@@ -5417,15 +5417,23 @@ public class PackageManagerService extends IPackageManager.Stub {
                             result.remove(xpResolveInfo);
                         }
                         if (result.size() == 0 && !addEphemeral) {
+                            // No result in current profile, but found candidate in parent user.
+                            // And we are not going to add emphemeral app, so we can return the
+                            // result straight away.
                             result.add(xpDomainInfo.resolveInfo);
                             return result;
                         }
-                    }
-                    if (result.size() > 1 || addEphemeral) {
-                        result = filterCandidatesWithDomainPreferredActivitiesLPr(
-                                intent, flags, result, xpDomainInfo, userId);
-                        sortResult = true;
-                    }
+                    } else if (result.size() <= 1 && !addEphemeral) {
+                        // No result in parent user and <= 1 result in current profile, and we
+                        // are not going to add emphemeral app, so we can return the result without
+                        // further processing.
+                        return result;
+                    }
+                    // We have more than one candidate (combining results from current and parent
+                    // profile), so we need filtering and sorting.
+                    result = filterCandidatesWithDomainPreferredActivitiesLPr(
+                            intent, flags, result, xpDomainInfo, userId);
+                    sortResult = true;
                 }
             } else {
                 final PackageParser.Package pkg = mPackages.get(pkgName);