/*package*/ void notifyGroupAndChildrenItemsChanged(int groupPosition, Object payload) { final long packedPosition = ExpandableAdapterHelper.getPackedPositionForGroup(groupPosition); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); final int visibleChildCount = mPositionTranslator.getVisibleChildCount(groupPosition); if (flatPosition != RecyclerView.NO_POSITION) { notifyItemRangeChanged(flatPosition, 1 + visibleChildCount, payload); } }
/*package*/ void expandAll() { if (!mPositionTranslator.isEmpty() && !mPositionTranslator.isAllExpanded()) { mPositionTranslator.build( mExpandableItemAdapter, ExpandablePositionTranslator.BUILD_OPTION_EXPANDED_ALL, mExpandableListManager.getDefaultGroupsExpandedState()); notifyDataSetChanged(); } }
/*package*/ void collapseAll() { if (!mPositionTranslator.isEmpty() && !mPositionTranslator.isAllCollapsed()) { mPositionTranslator.build( mExpandableItemAdapter, ExpandablePositionTranslator.BUILD_OPTION_COLLAPSED_ALL, mExpandableListManager.getDefaultGroupsExpandedState()); notifyDataSetChanged(); } }
/*package*/ void notifyGroupItemMoved(int fromGroupPosition, int toGroupPosition) { long packedFrom = RecyclerViewExpandableItemManager.getPackedPositionForGroup(fromGroupPosition); long packedTo = RecyclerViewExpandableItemManager.getPackedPositionForGroup(toGroupPosition); int flatFrom = getFlatPosition(packedFrom); int flatTo = getFlatPosition(packedTo); boolean fromExpanded = isGroupExpanded(fromGroupPosition); boolean toExpanded = isGroupExpanded(toGroupPosition); mPositionTranslator.moveGroupItem(fromGroupPosition, toGroupPosition); if (!fromExpanded && !toExpanded) { notifyItemMoved(flatFrom, flatTo); } else { notifyDataSetChanged(); } }
/*package*/ void notifyChildItemMoved(int fromGroupPosition, int fromChildPosition, int toGroupPosition, int toChildPosition) { long packedFrom = RecyclerViewExpandableItemManager.getPackedPositionForChild(fromGroupPosition, fromChildPosition); long packedTo = RecyclerViewExpandableItemManager.getPackedPositionForChild(toGroupPosition, toChildPosition); int flatFrom = getFlatPosition(packedFrom); int flatTo = getFlatPosition(packedTo); mPositionTranslator.moveChildItem(fromGroupPosition, fromChildPosition, toGroupPosition, toChildPosition); if (flatFrom != RecyclerView.NO_POSITION && flatTo != RecyclerView.NO_POSITION) { notifyItemMoved(flatFrom, flatTo); } else if (flatFrom != RecyclerView.NO_POSITION) { notifyItemRemoved(flatFrom); } else if (flatTo != RecyclerView.NO_POSITION) { notifyItemInserted(flatTo); } }
/*package*/ void notifyGroupItemRangeInserted(int groupPositionStart, int count, boolean expanded) { int insertedCount = mPositionTranslator.insertGroupItems(groupPositionStart, count, expanded); if (insertedCount > 0) { final long packedPosition = ExpandableAdapterHelper.getPackedPositionForGroup(groupPositionStart); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); notifyItemRangeInserted(flatPosition, insertedCount); raiseOnGroupExpandedSequentially(groupPositionStart, count, false, null); } }
/*package*/ void notifyGroupItemInserted(int groupPosition, boolean expanded) { int insertedCount = mPositionTranslator.insertGroupItem(groupPosition, expanded); if (insertedCount > 0) { final long packedPosition = ExpandableAdapterHelper.getPackedPositionForGroup(groupPosition); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); notifyItemInserted(flatPosition); // raise onGroupExpand() event raiseOnGroupExpandedSequentially(groupPosition, 1, false, null); } }
/*package*/ void notifyChildItemInserted(int groupPosition, int childPosition) { mPositionTranslator.insertChildItem(groupPosition, childPosition); final long packedPosition = ExpandableAdapterHelper.getPackedPositionForChild(groupPosition, childPosition); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); if (flatPosition != RecyclerView.NO_POSITION) { notifyItemInserted(flatPosition); } }
/*package*/ void notifyChildItemRemoved(int groupPosition, int childPosition) { final long packedPosition = ExpandableAdapterHelper.getPackedPositionForChild(groupPosition, childPosition); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); mPositionTranslator.removeChildItem(groupPosition, childPosition); if (flatPosition != RecyclerView.NO_POSITION) { notifyItemRemoved(flatPosition); } }
/*package*/ void notifyChildrenOfGroupItemChanged(int groupPosition, Object payload) { final int visibleChildCount = mPositionTranslator.getVisibleChildCount(groupPosition); // notify if the group is expanded if (visibleChildCount > 0) { final long packedPosition = ExpandableAdapterHelper.getPackedPositionForChild(groupPosition, 0); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); if (flatPosition != RecyclerView.NO_POSITION) { notifyItemRangeChanged(flatPosition, visibleChildCount, payload); } } }
/*package*/ void notifyChildItemRangeInserted(int groupPosition, int childPositionStart, int itemCount) { mPositionTranslator.insertChildItems(groupPosition, childPositionStart, itemCount); final long packedPosition = ExpandableAdapterHelper.getPackedPositionForChild(groupPosition, childPositionStart); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); if (flatPosition != RecyclerView.NO_POSITION) { notifyItemRangeInserted(flatPosition, itemCount); } }
/*package*/ void notifyChildItemRangeRemoved(int groupPosition, int childPositionStart, int itemCount) { final long packedPosition = ExpandableAdapterHelper.getPackedPositionForChild(groupPosition, childPositionStart); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); mPositionTranslator.removeChildItems(groupPosition, childPositionStart, itemCount); if (flatPosition != RecyclerView.NO_POSITION) { notifyItemRangeRemoved(flatPosition, itemCount); } }
/*package*/ void notifyGroupItemRemoved(int groupPosition) { final long packedPosition = ExpandableAdapterHelper.getPackedPositionForGroup(groupPosition); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); int removedCount = mPositionTranslator.removeGroupItem(groupPosition); if (removedCount > 0) { notifyItemRangeRemoved(flatPosition, removedCount); } }
/*package*/ void notifyGroupItemRangeRemoved(int groupPositionStart, int count) { final long packedPosition = ExpandableAdapterHelper.getPackedPositionForGroup(groupPositionStart); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); int removedCount = mPositionTranslator.removeGroupItems(groupPositionStart, count); if (removedCount > 0) { notifyItemRangeRemoved(flatPosition, removedCount); } }
private void rebuildPositionTranslator() { if (mPositionTranslator != null) { long[] savedState = mPositionTranslator.getSavedStateArray(); mPositionTranslator.build( mExpandableItemAdapter, ExpandablePositionTranslator.BUILD_OPTION_DEFAULT, mExpandableListManager.getDefaultGroupsExpandedState()); // NOTE: do not call hook routines and listener methods mPositionTranslator.restoreExpandedGroupItems(savedState, null, null, null); } }
/*package*/ void notifyGroupItemChanged(int groupPosition, Object payload) { final long packedPosition = ExpandableAdapterHelper.getPackedPositionForGroup(groupPosition); final int flatPosition = mPositionTranslator.getFlatPosition(packedPosition); if (flatPosition != RecyclerView.NO_POSITION) { notifyItemChanged(flatPosition, payload); } }
/** * Gets the child position from a packed position. * To get the group that this child belongs to, use {@link #getPackedPositionGroup(long)}. * See {@link #getPackedPositionForChild(int, int)}. * * @param packedPosition The packed position from which the child position will be returned. * @return The child position portion of the packed position. If this does not contain a child, returns {@link androidx.recyclerview.widget.RecyclerView#NO_POSITION}. */ public static int getPackedPositionChild(long packedPosition) { return ExpandableAdapterHelper.getPackedPositionChild(packedPosition); }
/** * Gets the group position from a packed position. See {@link #getPackedPositionForChild(int, int)}. * * @param packedPosition The packed position from which the group position will be returned. * @return THe group position of the packed position. If this does not contain a group, returns {@link androidx.recyclerview.widget.RecyclerView#NO_POSITION}. */ public static int getPackedPositionGroup(long packedPosition) { return ExpandableAdapterHelper.getPackedPositionGroup(packedPosition); }
/** * Whether the given group is currently expanded. * * @param groupPosition The group to check * @return Whether the group is currently expanded */ public boolean isGroupExpanded(int groupPosition) { return (mWrapperAdapter != null) && mWrapperAdapter.isGroupExpanded(groupPosition); }
/** * Gets the number of collapsed groups. * * @return the number of collapsed groups */ public int getCollapsedGroupsCount() { return mWrapperAdapter.getCollapsedGroupsCount(); }