/* * Copyright (c) 2010-2019 Belledonne Communications SARL. * * This file is part of linphone-android * (see https://www.linphone.org). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package org.linphone.utils; import android.util.SparseBooleanArray; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public abstract class SelectableAdapter extends RecyclerView.Adapter { private final SparseBooleanArray mSelectedItems; private boolean mIsEditionEnabled = false; private final SelectableHelper mListHelper; protected SelectableAdapter(SelectableHelper helper) { mSelectedItems = new SparseBooleanArray(); mListHelper = helper; } public boolean isEditionEnabled() { return mIsEditionEnabled; } public void enableEdition(boolean set) { mIsEditionEnabled = set; mSelectedItems.clear(); notifyDataSetChanged(); } /** * Indicates if the item at position position is selected * * @param position Position of the item to check * @return true if the item is selected, false otherwise */ protected boolean isSelected(int position) { return getSelectedItems().contains(position); } /** * Toggle the selection status of the item at a given position * * @param position Position of the item to toggle the selection status for */ public void toggleSelection(int position) { if (mSelectedItems.get(position, false)) { mSelectedItems.delete(position); } else { mSelectedItems.put(position, true); } mListHelper.updateSelectionButtons( getSelectedItemCount() == 0, getSelectedItemCount() == getItemCount()); notifyItemChanged(position); } /** * Count the selected items * * @return Selected items count */ public int getSelectedItemCount() { return mSelectedItems.size(); } /** * Indicates the list of selected items * * @return List of selected items ids */ public List getSelectedItems() { List items = new ArrayList<>(mSelectedItems.size()); for (int i = 0; i < mSelectedItems.size(); ++i) { items.add(mSelectedItems.keyAt(i)); } return items; } public void selectAll() { for (int i = 0; i < getItemCount(); i++) { mSelectedItems.put(i, true); notifyDataSetChanged(); } mListHelper.updateSelectionButtons(false, true); } public void deselectAll() { mSelectedItems.clear(); mListHelper.updateSelectionButtons(true, false); notifyDataSetChanged(); } public abstract Object getItem(int position); }