Austin Huang
3 years ago
No known key found for this signature in database
GPG Key ID: 84C23AA04587A91F
1 changed files with 0 additions and 104 deletions
@ -1,104 +0,0 @@ |
|||||
package awais.instagrabber.adapters; |
|
||||
|
|
||||
import androidx.annotation.NonNull; |
|
||||
import androidx.recyclerview.widget.DiffUtil; |
|
||||
import androidx.recyclerview.widget.ListAdapter; |
|
||||
import androidx.recyclerview.widget.RecyclerView; |
|
||||
|
|
||||
import java.util.ArrayList; |
|
||||
import java.util.List; |
|
||||
|
|
||||
public abstract class MultiSelectListAdapter<T extends MultiSelectListAdapter.Selectable, VH extends RecyclerView.ViewHolder> extends |
|
||||
ListAdapter<T, VH> { |
|
||||
|
|
||||
private boolean isSelecting; |
|
||||
private OnItemClickListener<T> internalOnItemClickListener; |
|
||||
private OnItemLongClickListener<T> internalOnLongItemClickListener; |
|
||||
|
|
||||
private final List<T> selectedItems = new ArrayList<>(); |
|
||||
|
|
||||
protected MultiSelectListAdapter(@NonNull final DiffUtil.ItemCallback<T> diffCallback, |
|
||||
final OnItemClickListener<T> clickListener, |
|
||||
final OnItemLongClickListener<T> longClickListener) { |
|
||||
super(diffCallback); |
|
||||
internalOnItemClickListener = (item, position) -> { |
|
||||
if (isSelecting) { |
|
||||
toggleSelection(item, position); |
|
||||
} |
|
||||
if (clickListener == null) { |
|
||||
return; |
|
||||
} |
|
||||
clickListener.onItemClick(item, position); |
|
||||
}; |
|
||||
internalOnLongItemClickListener = (item, position) -> { |
|
||||
if (!isSelecting) { |
|
||||
isSelecting = true; |
|
||||
} |
|
||||
toggleSelection(item, position); |
|
||||
if (longClickListener == null) { |
|
||||
return true; |
|
||||
} |
|
||||
return longClickListener.onItemLongClick(item, position); |
|
||||
}; |
|
||||
} |
|
||||
|
|
||||
public OnItemClickListener<T> getInternalOnItemClickListener() { |
|
||||
return internalOnItemClickListener; |
|
||||
} |
|
||||
|
|
||||
public OnItemLongClickListener<T> getInternalOnLongItemClickListener() { |
|
||||
return internalOnLongItemClickListener; |
|
||||
} |
|
||||
|
|
||||
private void toggleSelection(final T item, final int position) { |
|
||||
if (item == null) { |
|
||||
return; |
|
||||
} |
|
||||
if (selectedItems.size() >= 100) { |
|
||||
// Toast.makeText(mainActivity, R.string.downloader_too_many, Toast.LENGTH_SHORT); |
|
||||
return; |
|
||||
} |
|
||||
if (item.isSelected()) { |
|
||||
item.setSelected(false); |
|
||||
selectedItems.remove(item); |
|
||||
} else { |
|
||||
item.setSelected(true); |
|
||||
selectedItems.add(item); |
|
||||
} |
|
||||
if (selectedItems.size() == 0) { |
|
||||
isSelecting = false; |
|
||||
} |
|
||||
notifyItemChanged(position); |
|
||||
} |
|
||||
|
|
||||
public boolean isSelecting() { |
|
||||
return isSelecting; |
|
||||
} |
|
||||
|
|
||||
public List<T> getSelectedModels() { |
|
||||
return selectedItems; |
|
||||
} |
|
||||
|
|
||||
public void clearSelection() { |
|
||||
for (final T item : selectedItems) { |
|
||||
item.setSelected(false); |
|
||||
} |
|
||||
selectedItems.clear(); |
|
||||
isSelecting = false; |
|
||||
notifyDataSetChanged(); |
|
||||
} |
|
||||
|
|
||||
public interface Selectable { |
|
||||
boolean isSelected(); |
|
||||
|
|
||||
void setSelected(boolean selected); |
|
||||
} |
|
||||
|
|
||||
public interface OnItemClickListener<T> { |
|
||||
void onItemClick(T item, int position); |
|
||||
} |
|
||||
|
|
||||
public interface OnItemLongClickListener<T> { |
|
||||
boolean onItemLongClick(T item, int position); |
|
||||
} |
|
||||
} |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue