package com.fastaccess.ui.adapter;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import com.fastaccess.R;
import com.fastaccess.data.dao.AppsModel;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.ui.adapter.viewholder.DeviceAppsViewHolder;
import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter;
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by Kosh on 30 Aug 2016, 11:42 PM
*/
public class DeviceAppsAdapter extends BaseRecyclerAdapter<AppsModel, DeviceAppsViewHolder,
DeviceAppsViewHolder.OnItemClickListener<AppsModel>> implements Filterable {
private Map<String, AppsModel> selection;
private boolean selectedApps;
public DeviceAppsAdapter(@NonNull List<AppsModel> data, @Nullable DeviceAppsViewHolder.OnItemClickListener<AppsModel> listener,
Map<String, AppsModel> selection) {
this(data, listener, selection, false);
}
public DeviceAppsAdapter(@NonNull List<AppsModel> data, @Nullable DeviceAppsViewHolder.OnItemClickListener<AppsModel> listener,
Map<String, AppsModel> selection, boolean selectedApps) {
super(data, listener);
this.selection = selection;
this.selectedApps = selectedApps;
}
@Override protected DeviceAppsViewHolder viewHolder(ViewGroup parent, int viewType) {
return new DeviceAppsViewHolder(BaseViewHolder.getView(parent, R.layout.app_row_item), this);
}
@Override protected void onBindView(DeviceAppsViewHolder holder, int position) {
AppsModel model = getItem(position);
if (model != null) {
holder.bind(model, isSelected(model.getComponentName().toShortString()), selectedApps);
}
}
@Override public Filter getFilter() {
return new Filter() {
@Override protected FilterResults performFiltering(CharSequence charSequence) {
final FilterResults oReturn = new FilterResults();
final List<AppsModel> results = new ArrayList<>();
if (!InputHelper.isEmpty(charSequence)) {
if (!getData().isEmpty()) {
for (AppsModel appInfo : getData()) {
if (appInfo.getAppName().toLowerCase().contains(charSequence.toString())) {
results.add(appInfo);
}
}
}
oReturn.values = results;
oReturn.count = results.size();
}
return oReturn;
}
@SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) {
insertItems((List<AppsModel>) results.values);
}
};
}
public void select(String packageName, int position, boolean select) {
if (select) selection.put(packageName, getItem(position));
else selection.remove(packageName);
notifyItemChanged(position);
}
public boolean isSelected(@NonNull String packageName) {
return selection.get(packageName) != null;
}
public boolean hasSelection() {
return selection != null && !selection.isEmpty();
}
public void clearSelection() {
if (hasSelection()) selection.clear();
notifyDataSetChanged();
}
public int selectionSize() {
return selection != null ? selection.size() : 0;
}
public List<AppsModel> getSelections() {
return new ArrayList<>(selection.values());
}
}