/*
* 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.app.Dialog;
import android.content.Context;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.recyclerview.widget.RecyclerView;
import org.linphone.R;
public class SelectableHelper {
private final ImageView mEditButton;
private final ImageView mSelectAllButton;
private final ImageView mDeselectAllButton;
private final ImageView mDeleteSelectionButton;
private final LinearLayout mEditTopBar;
private final LinearLayout mTopBar;
private SelectableAdapter mAdapter;
private final DeleteListener mDeleteListener;
private final Context mContext;
private int mDialogDeleteMessageResourceId;
public SelectableHelper(View view, DeleteListener listener) {
mContext = view.getContext();
mDeleteListener = listener;
mEditTopBar = view.findViewById(R.id.edit_list);
mTopBar = view.findViewById(R.id.top_bar);
ImageView cancelButton = view.findViewById(R.id.cancel);
cancelButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
quitEditionMode();
}
});
mEditButton = view.findViewById(R.id.edit);
mEditButton.setEnabled(false);
mEditButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mAdapter.getItemCount() > 0) {
enterEditionMode();
mTopBar.setVisibility(View.GONE);
mEditTopBar.setVisibility(View.VISIBLE);
}
}
});
mSelectAllButton = view.findViewById(R.id.select_all);
mSelectAllButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
mAdapter.selectAll();
}
});
mDeselectAllButton = view.findViewById(R.id.deselect_all);
mDeselectAllButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
mAdapter.deselectAll();
}
});
mDeleteSelectionButton = view.findViewById(R.id.delete);
mDeleteSelectionButton.setEnabled(false);
mDeleteSelectionButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog =
LinphoneUtils.getDialog(
mContext,
mContext.getString(mDialogDeleteMessageResourceId));
Button delete = dialog.findViewById(R.id.dialog_delete_button);
Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
delete.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
mDeleteListener.onDeleteSelection(getSelectedObjects());
mEditButton.setEnabled(mAdapter.getItemCount() != 0);
dialog.dismiss();
quitEditionMode();
}
});
cancel.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
quitEditionMode();
}
});
dialog.show();
}
});
mDialogDeleteMessageResourceId = R.string.delete_text;
}
public void setDialogMessage(int id) {
mDialogDeleteMessageResourceId = id;
}
public SelectableAdapter getAdapter() {
return mAdapter;
}
public void setAdapter(SelectableAdapter adapter) {
mAdapter = adapter;
mEditButton.setEnabled(mAdapter.getItemCount() != 0);
}
public void updateSelectionButtons(boolean isSelectionEmpty, boolean isSelectionFull) {
if (isSelectionEmpty) {
mDeleteSelectionButton.setEnabled(false);
} else {
mDeleteSelectionButton.setEnabled(true);
}
if (isSelectionFull) {
mSelectAllButton.setVisibility(View.GONE);
mDeselectAllButton.setVisibility(View.VISIBLE);
} else {
mSelectAllButton.setVisibility(View.VISIBLE);
mDeselectAllButton.setVisibility(View.GONE);
}
}
private void quitEditionMode() {
mAdapter.enableEdition(false);
mTopBar.setVisibility(View.VISIBLE);
mEditTopBar.setVisibility(View.GONE);
mDeleteSelectionButton.setEnabled(false);
mSelectAllButton.setVisibility(View.GONE);
mDeselectAllButton.setVisibility(View.VISIBLE);
}
public void enterEditionMode() {
mAdapter.enableEdition(true);
mTopBar.setVisibility(View.GONE);
mEditTopBar.setVisibility(View.VISIBLE);
mDeleteSelectionButton.setEnabled(false);
mSelectAllButton.setVisibility(View.VISIBLE);
mDeselectAllButton.setVisibility(View.GONE);
}
private Object[] getSelectedObjects() {
Object[] objects = new Object[mAdapter.getSelectedItemCount()];
int index = 0;
for (Integer i : mAdapter.getSelectedItems()) {
objects[index] = mAdapter.getItem(i);
index++;
}
return objects;
}
public void setEditButtonVisibility(boolean visible) {
mEditButton.setVisibility(visible ? View.VISIBLE : View.GONE);
}
public interface DeleteListener {
void onDeleteSelection(Object[] objectsToDelete);
}
}