summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Winson Chung <winsonc@google.com> 2019-04-08 19:05:27 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-04-08 19:05:27 +0000
commitf883ea697e6ce643134a820fb750833f8ebfd784 (patch)
tree601a64b780eeed0363bd196b4a4dfb553d622e9b
parenta126a24c5210df495ed2460ef3209b9e4ddf6d34 (diff)
parentb41314be76e45ffae4b2c8dd773249b036d8e457 (diff)
Merge "Defer broadcasting ACTION_DEFERRED_ACTIVITY_CHANGED until actual change" into qt-dev
-rw-r--r--core/java/android/content/pm/PackageManagerInternal.java4
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java21
-rw-r--r--services/core/java/com/android/server/role/RoleManagerService.java11
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);
}
}
}