mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-04 01:46:49 +00:00
Merge "Fix ConcurrentModificationExceptions during binding." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3a801de233
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user