Merge "Fix the issue widget retore doesn't play well with work profile" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-04-28 22:02:36 +00:00
committed by Android (Google) Code Review

View File

@@ -4414,7 +4414,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
// a given package. Keep track of what we've done so far here; the list is
// cleared at the start of every system restore pass, but preserved through
// any install-time restore operations.
private final HashSet<String> mPrunedApps = new HashSet<>();
private final SparseArray<Set<String>> mPrunedAppsPerUser = new SparseArray<>();
private final HashMap<Provider, ArrayList<RestoreUpdateRecord>> mUpdatesByProvider =
new HashMap<>();
@@ -4537,7 +4537,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
// We're starting a new "system" restore operation, so any widget restore
// state that we see from here on is intended to replace the current
// widget configuration of any/all of the affected apps.
mPrunedApps.clear();
getPrunedAppsLocked(userId).clear();
mUpdatesByProvider.clear();
mUpdatesByHost.clear();
}
@@ -4934,8 +4934,10 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
// instances that are hosted by that app, and (b) all instances in other hosts
// for which 'pkg' is the provider. We assume that we'll be restoring all of
// these hosts & providers, so will be reconstructing a correct live state.
@GuardedBy("mLock")
private void pruneWidgetStateLocked(String pkg, int userId) {
if (!mPrunedApps.contains(pkg)) {
final Set<String> prunedApps = getPrunedAppsLocked(userId);
if (!prunedApps.contains(pkg)) {
if (DEBUG) {
Slog.i(TAG, "pruning widget state for restoring package " + pkg);
}
@@ -4958,7 +4960,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
removeWidgetLocked(widget);
}
}
mPrunedApps.add(pkg);
prunedApps.add(pkg);
} else {
if (DEBUG) {
Slog.i(TAG, "already pruned " + pkg + ", continuing normally");
@@ -4966,6 +4968,15 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
}
}
@GuardedBy("mLock")
@NonNull
private Set<String> getPrunedAppsLocked(int userId) {
if (!mPrunedAppsPerUser.contains(userId)) {
mPrunedAppsPerUser.set(userId, new ArraySet<>());
}
return mPrunedAppsPerUser.get(userId);
}
private boolean isProviderAndHostInUser(Widget widget, int userId) {
// Backup only widgets hosted or provided by the owner profile.
return widget.host.getUserId() == userId && (widget.provider == null