mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-19 18:58:19 +00:00
Using ItemInfoMatcher in place of similar interfaces and utility methods
Change-Id: I7337b819fe8f42f7a5a1481b5ed5d99a8cf583c4
This commit is contained in:
@@ -29,7 +29,6 @@ import android.annotation.TargetApi;
|
||||
import android.app.WallpaperManager;
|
||||
import android.appwidget.AppWidgetHostView;
|
||||
import android.appwidget.AppWidgetProviderInfo;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
@@ -3976,63 +3975,34 @@ public class Workspace extends PagedView
|
||||
for (final CellLayout layoutParent: cellLayouts) {
|
||||
final ViewGroup layout = layoutParent.getShortcutsAndWidgets();
|
||||
|
||||
final HashMap<ItemInfo, View> children = new HashMap<>();
|
||||
LongArrayMap<View> idToViewMap = new LongArrayMap<>();
|
||||
ArrayList<ItemInfo> items = new ArrayList<>();
|
||||
for (int j = 0; j < layout.getChildCount(); j++) {
|
||||
final View view = layout.getChildAt(j);
|
||||
children.put((ItemInfo) view.getTag(), view);
|
||||
if (view.getTag() instanceof ItemInfo) {
|
||||
ItemInfo item = (ItemInfo) view.getTag();
|
||||
items.add(item);
|
||||
idToViewMap.put(item.id, view);
|
||||
}
|
||||
}
|
||||
|
||||
final ArrayList<View> childrenToRemove = new ArrayList<>();
|
||||
final HashMap<FolderInfo, ArrayList<ShortcutInfo>> folderAppsToRemove = new HashMap<>();
|
||||
LauncherModel.ItemInfoFilter filter = new LauncherModel.ItemInfoFilter() {
|
||||
@Override
|
||||
public boolean filterItem(ItemInfo parent, ItemInfo info,
|
||||
ComponentName cn) {
|
||||
if (parent instanceof FolderInfo) {
|
||||
if (matcher.matches(info, cn)) {
|
||||
FolderInfo folder = (FolderInfo) parent;
|
||||
ArrayList<ShortcutInfo> appsToRemove;
|
||||
if (folderAppsToRemove.containsKey(folder)) {
|
||||
appsToRemove = folderAppsToRemove.get(folder);
|
||||
} else {
|
||||
appsToRemove = new ArrayList<ShortcutInfo>();
|
||||
folderAppsToRemove.put(folder, appsToRemove);
|
||||
}
|
||||
appsToRemove.add((ShortcutInfo) info);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (matcher.matches(info, cn)) {
|
||||
childrenToRemove.add(children.get(info));
|
||||
return true;
|
||||
}
|
||||
for (ItemInfo itemToRemove : matcher.filterItemInfos(items)) {
|
||||
View child = idToViewMap.get(itemToRemove.id);
|
||||
|
||||
if (child != null) {
|
||||
// Note: We can not remove the view directly from CellLayoutChildren as this
|
||||
// does not re-mark the spaces as unoccupied.
|
||||
layoutParent.removeViewInLayout(child);
|
||||
if (child instanceof DropTarget) {
|
||||
mDragController.removeDropTarget((DropTarget) child);
|
||||
}
|
||||
} else if (itemToRemove.container >= 0) {
|
||||
// The item may belong to a folder.
|
||||
View parent = idToViewMap.get(itemToRemove.container);
|
||||
if (parent != null) {
|
||||
((FolderInfo) parent.getTag()).remove((ShortcutInfo) itemToRemove, false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
LauncherModel.filterItemInfos(children.keySet(), filter);
|
||||
|
||||
// Remove all the apps from their folders
|
||||
for (FolderInfo folder : folderAppsToRemove.keySet()) {
|
||||
ArrayList<ShortcutInfo> appsToRemove = folderAppsToRemove.get(folder);
|
||||
for (ShortcutInfo info : appsToRemove) {
|
||||
folder.remove(info, false);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove all the other children
|
||||
for (View child : childrenToRemove) {
|
||||
// Note: We can not remove the view directly from CellLayoutChildren as this
|
||||
// does not re-mark the spaces as unoccupied.
|
||||
layoutParent.removeViewInLayout(child);
|
||||
if (child instanceof DropTarget) {
|
||||
mDragController.removeDropTarget((DropTarget) child);
|
||||
}
|
||||
}
|
||||
|
||||
if (childrenToRemove.size() > 0) {
|
||||
layout.requestLayout();
|
||||
layout.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4133,8 +4103,9 @@ public class Workspace extends PagedView
|
||||
public void removeAbandonedPromise(String packageName, UserHandleCompat user) {
|
||||
HashSet<String> packages = new HashSet<>(1);
|
||||
packages.add(packageName);
|
||||
LauncherModel.deletePackageFromDatabase(mLauncher, packageName, user);
|
||||
removeItemsByMatcher(ItemInfoMatcher.ofPackages(packages, user));
|
||||
ItemInfoMatcher matcher = ItemInfoMatcher.ofPackages(packages, user);
|
||||
LauncherModel.deleteItemsFromDatabase(mLauncher, matcher);
|
||||
removeItemsByMatcher(matcher);
|
||||
}
|
||||
|
||||
public void updateRestoreItems(final HashSet<ItemInfo> updates) {
|
||||
@@ -4311,7 +4282,6 @@ public class Workspace extends PagedView
|
||||
@Override
|
||||
public boolean evaluate(ItemInfo info, View view) {
|
||||
if (view instanceof PendingAppWidgetHostView && mInfos.contains(info)) {
|
||||
PendingAppWidgetHostView hostView = (PendingAppWidgetHostView) view;
|
||||
mLauncher.removeItem(view, info, false /* deleteFromDb */);
|
||||
mLauncher.bindAppWidget((LauncherAppWidgetInfo) info);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user