Merge "Fix ConcurrentModificationExceptions during binding." into tm-qpr-dev am: 3a801de233

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/20468156

Change-Id: I2a176b09a92ce02acd2a406f6647701098164328
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2022-11-18 01:57:55 +00:00
committed by Automerger Merge Worker
6 changed files with 17 additions and 28 deletions

View File

@@ -305,7 +305,7 @@ public class HotseatPredictionController implements DragController.DragListener,
* Sets or updates the predicted items only once the hotseat becomes hidden to the user
*/
private void applyPredictedItems(FixedContainerItems items) {
mPredictedItems = items.items;
mPredictedItems = new ArrayList(items.items);
if (mPredictedItems.isEmpty()) {
HotseatRestoreHelper.restoreBackup(mLauncher);
}

View File

@@ -34,8 +34,10 @@ import com.android.launcher3.LauncherPrefs;
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
import com.android.launcher3.model.QuickstepModelDelegate.PredictorState;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -68,7 +70,7 @@ public class PredictionUpdateTask extends BaseModelUpdateTask {
.map(info -> info.user)
.collect(Collectors.toSet());
FixedContainerItems fci = new FixedContainerItems(mPredictorState.containerId);
List<ItemInfo> items = new ArrayList<>(mTargets.size());
for (AppTarget target : mTargets) {
WorkspaceItemInfo itemInfo;
ShortcutInfo si = target.getShortcutInfo();
@@ -107,10 +109,11 @@ public class PredictionUpdateTask extends BaseModelUpdateTask {
}
}
itemInfo.container = fci.containerId;
fci.items.add(itemInfo);
itemInfo.container = mPredictorState.containerId;
items.add(itemInfo);
}
FixedContainerItems fci = new FixedContainerItems(mPredictorState.containerId, items);
dataModel.extraItems.put(fci.containerId, fci);
bindExtraContainerItems(fci);
usersForChangedShortcuts.forEach(

View File

@@ -132,7 +132,8 @@ public class QuickstepModelDelegate extends ModelDelegate {
// Widgets prediction isn't used frequently. And thus, it is not persisted on disk.
mDataModel.extraItems.put(mWidgetsRecommendationState.containerId,
new FixedContainerItems(mWidgetsRecommendationState.containerId));
new FixedContainerItems(mWidgetsRecommendationState.containerId,
new ArrayList<>()));
mActive = true;
}

View File

@@ -25,6 +25,7 @@ import androidx.annotation.NonNull;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
import com.android.launcher3.model.QuickstepModelDelegate.PredictorState;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.widget.PendingAddWidgetInfo;
@@ -91,10 +92,12 @@ public final class WidgetsPredictionUpdateTask extends BaseModelUpdateTask {
if (servicePredictedItems.isEmpty()) {
servicePredictedItems.addAll(localFilteredWidgets);
}
List<ItemInfo> items = servicePredictedItems.stream()
.map(it -> new PendingAddWidgetInfo(it.widgetInfo, CONTAINER_WIDGETS_PREDICTION))
.collect(Collectors.toList());
FixedContainerItems fixedContainerItems =
new FixedContainerItems(mPredictorState.containerId);
servicePredictedItems.forEach(w -> fixedContainerItems.items.add(
new PendingAddWidgetInfo(w.widgetInfo, CONTAINER_WIDGETS_PREDICTION)));
new FixedContainerItems(mPredictorState.containerId, items);
dataModel.extraItems.put(mPredictorState.containerId, fixedContainerItems);
bindExtraContainerItems(fixedContainerItems);

View File

@@ -118,8 +118,7 @@ public abstract class BaseModelUpdateTask implements ModelUpdateTask {
}
public void bindExtraContainerItems(@NonNull final FixedContainerItems item) {
FixedContainerItems copy = item.clone();
scheduleCallbackTask(c -> c.bindExtraContainerItems(copy));
scheduleCallbackTask(c -> c.bindExtraContainerItems(item));
}
public void bindDeepShortcuts(@NonNull final BgDataModel dataModel) {

View File

@@ -433,26 +433,9 @@ public class BgDataModel {
public final int containerId;
public final List<ItemInfo> items;
public FixedContainerItems(int containerId) {
this(containerId, new ArrayList<>());
}
public FixedContainerItems(int containerId, List<ItemInfo> items) {
this.containerId = containerId;
this.items = items;
}
@Override
public FixedContainerItems clone() {
return new FixedContainerItems(containerId, new ArrayList<>(items));
}
public void setItems(List<ItemInfo> newItems) {
items.clear();
newItems.forEach(item -> {
item.container = containerId;
items.add(item);
});
this.items = Collections.unmodifiableList(items);
}
}