/** * @param position the global position of the current item * @return a set with the global positions of all expanded items on the root level */ public int[] getExpandedItemsRootLevel(int position) { int[] expandedItems; ArraySet<Integer> expandedItemsList = new ArraySet<>(); Item item = mFastAdapter.getItem(position); for (int i = 0, size = mFastAdapter.getItemCount(); i < size; i++) { Item currItem = mFastAdapter.getItem(i); if (currItem instanceof ISubItem) { IItem parent = ((ISubItem) currItem).getParent(); if (parent instanceof IExpandable && ((IExpandable) parent).isExpanded()) { i += ((IExpandable) parent).getSubItems().size(); if (parent != item) expandedItemsList.add(mFastAdapter.getPosition((Item) parent)); } } } int expandedItemsListLength = expandedItemsList.size(); expandedItems = new int[expandedItemsListLength]; for (int i = 0; i < expandedItemsListLength; i++) { expandedItems[i] = expandedItemsList.valueAt(i); } return expandedItems; }
@Override public boolean apply(@NonNull IAdapter<Item> lastParentAdapter, int lastParentPosition, @NonNull Item item, int position) { //we do not care about non visible items if (position == -1) { return false; } //this is the entrance parent if (allowedParents.size() > 0 && item instanceof ISubItem) { // Go on until we hit an item with a parent which was not in our expandable hierarchy IItem parent = ((ISubItem) item).getParent(); if (parent == null || !allowedParents.contains(parent)) { return true; } } if (item instanceof IExpandable) { IExpandable expandable = (IExpandable) item; if (expandable.isExpanded()) { expandable.withIsExpanded(false); if (expandable.getSubItems() != null) { expandedItemsCount[0] += expandable.getSubItems().size(); allowedParents.add(item); } } } return false; } }, position, true);
/** * @return a set with all items which are currently selected (includes subitems) */ public Set<Item> getSelectedItems() { final Set<Item> items = new ArraySet<>(); mFastAdapter.recursive(new AdapterPredicate<Item>() { @Override public boolean apply(@NonNull IAdapter<Item> lastParentAdapter, int lastParentPosition, Item item, int position) { if (item.isSelected()) { items.add(item); } return false; } }, false); return items; }
/** * @return a set with the global positions of all selected items (which are currently in the list (includes expanded expandable items)) */ public Set<Integer> getSelections() { Set<Integer> selections = new ArraySet<>(); for (int i = 0, size = mFastAdapter.getItemCount(); i < size; i++) { if (mFastAdapter.getItem(i).isSelected()) { selections.add(i); } } return selections; }
final int[] expandedItemsCount = {0}; mFastAdapter.recursive(new AdapterPredicate<Item>() { ArraySet<IItem> allowedParents = new ArraySet<>();
@Override public Set<String> enumerate() { if (currentTunnel != null) { final Set<String> runningTunnels = new ArraySet<>(); runningTunnels.add(currentTunnel.getName()); return runningTunnels; } return Collections.emptySet(); }
public Set<Integer> getSelectedFileIndexes() { if (fileTree == null) return new HashSet<Integer>(); List<BencodeFileTree> files = BencodeFileTreeUtils.getFiles(fileTree); Set<Integer> indexes = new ArraySet<>(); for (BencodeFileTree file : files) if (file.isSelected()) indexes.add(file.getIndex()); return indexes; }