diff options
| author | 2019-04-08 19:05:27 +0000 | |
|---|---|---|
| committer | 2019-04-08 19:05:27 +0000 | |
| commit | f883ea697e6ce643134a820fb750833f8ebfd784 (patch) | |
| tree | 601a64b780eeed0363bd196b4a4dfb553d622e9b | |
| parent | a126a24c5210df495ed2460ef3209b9e4ddf6d34 (diff) | |
| parent | b41314be76e45ffae4b2c8dd773249b036d8e457 (diff) | |
Merge "Defer broadcasting ACTION_DEFERRED_ACTIVITY_CHANGED until actual change" into qt-dev
3 files changed, 25 insertions, 11 deletions
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index 5f5473583907..e14d7e895f17 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -193,8 +193,10 @@ public abstract class PackageManagerInternal { * * @param packageName package name of the default home, or {@code null} to remove * @param userId the user id + * @param callback the callback made after the default home as been updated */ - void setDefaultHomeAsync(@Nullable String packageName, @UserIdInt int userId); + void setDefaultHomeAsync(@Nullable String packageName, @UserIdInt int userId, + @NonNull Consumer<Boolean> callback); } /** diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index d5b1ca3e72a1..51bf5191247f 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -19710,8 +19710,9 @@ public class PackageManagerService extends IPackageManager.Stub filter.dump(new LogPrinter(Log.INFO, TAG), " "); pir.addFilter(new PreferredActivity(filter, match, set, activity, always)); scheduleWritePackageRestrictionsLocked(userId); - postPreferredActivityChangedBroadcast(userId); - updateDefaultHomeLPw(userId); + if (!updateDefaultHomeLPw(userId)) { + postPreferredActivityChangedBroadcast(userId); + } } } @@ -20490,7 +20491,10 @@ public class PackageManagerService extends IPackageManager.Stub return null; } - private void updateDefaultHomeLPw(int userId) { + /** + * @return Whether the ACTION_PREFERRED_ACTIVITY_CHANGED broadcast has been scheduled. + */ + private boolean updateDefaultHomeLPw(int userId) { Intent intent = getHomeIntent(); List<ResolveInfo> resolveInfos = queryIntentActivitiesInternal(intent, null, PackageManager.GET_META_DATA, userId); @@ -20501,15 +20505,20 @@ public class PackageManagerService extends IPackageManager.Stub ? preferredResolveInfo.activityInfo.packageName : null; String currentPackageName = mDefaultHomeProvider.getDefaultHome(userId); if (TextUtils.equals(currentPackageName, packageName)) { - return; + return false; } String[] callingPackages = getPackagesForUid(Binder.getCallingUid()); if (callingPackages != null && ArrayUtils.contains(callingPackages, mRequiredPermissionControllerPackage)) { // PermissionController manages default home directly. - return; + return false; } - mDefaultHomeProvider.setDefaultHomeAsync(packageName, userId); + mDefaultHomeProvider.setDefaultHomeAsync(packageName, userId, (successful) -> { + if (successful) { + postPreferredActivityChangedBroadcast(userId); + } + }); + return true; } @Override diff --git a/services/core/java/com/android/server/role/RoleManagerService.java b/services/core/java/com/android/server/role/RoleManagerService.java index 325ba071b428..b2ac1b884483 100644 --- a/services/core/java/com/android/server/role/RoleManagerService.java +++ b/services/core/java/com/android/server/role/RoleManagerService.java @@ -85,6 +85,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.function.Consumer; /** * Service for role management. @@ -780,19 +781,21 @@ public class RoleManagerService extends SystemService implements RoleUserState.C } @Override - public void setDefaultHomeAsync(@Nullable String packageName, @UserIdInt int userId) { - RemoteCallback callback = new RemoteCallback(result -> { + public void setDefaultHomeAsync(@Nullable String packageName, @UserIdInt int userId, + @NonNull Consumer<Boolean> callback) { + RemoteCallback remoteCallback = new RemoteCallback(result -> { boolean successful = result != null; if (!successful) { Slog.e(LOG_TAG, "Failed to set default home: " + packageName); } + callback.accept(successful); }); if (packageName != null) { getOrCreateControllerService(userId).onAddRoleHolder(RoleManager.ROLE_HOME, - packageName, 0, callback); + packageName, 0, remoteCallback); } else { getOrCreateControllerService(userId).onClearRoleHolders(RoleManager.ROLE_HOME, 0, - callback); + remoteCallback); } } } |