/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.nononsenseapps.filepicker;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.util.SortedList;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
/**
* A simple adapter which also inserts a header item ".." to handle going up to the parent folder.
* @param <T> the type which is used, for example a normal java File object.
*/
public class FileItemAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
protected final LogicHandler<T> mLogic;
protected SortedList<T> mList = null;
public FileItemAdapter(@NonNull LogicHandler<T> logic) {
this.mLogic = logic;
}
public void setList(@Nullable SortedList<T> list) {
mList = list;
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return mLogic.onCreateViewHolder(parent, viewType);
}
@Override
@SuppressWarnings("unchecked")
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int headerPosition) {
if (headerPosition == 0) {
mLogic.onBindHeaderViewHolder((AbstractFilePickerFragment<T>.HeaderViewHolder) viewHolder);
} else {
int pos = headerPosition - 1;
mLogic.onBindViewHolder((AbstractFilePickerFragment<T>.DirViewHolder) viewHolder, pos, mList.get(pos));
}
}
@Override
public int getItemViewType(int headerPosition) {
if (0 == headerPosition) {
return LogicHandler.VIEWTYPE_HEADER;
} else {
int pos = headerPosition - 1;
return mLogic.getItemViewType(pos, mList.get(pos));
}
}
@Override
public int getItemCount() {
if (mList == null) {
return 0;
}
// header + count
return 1 + mList.size();
}
/**
* Get the item at the designated position in the adapter.
*
* @param position of item in adapter
* @return null if position is zero (that means it's the ".." header), the item otherwise.
*/
protected @Nullable T getItem(int position) {
if (position == 0) {
return null;
}
return mList.get(position - 1);
}
}