package net.i2p.android.util;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.eowise.recyclerview.stickyheaders.StickyHeadersAdapter;
import net.i2p.android.router.R;
public class AlphanumericHeaderAdapter implements StickyHeadersAdapter<AlphanumericHeaderAdapter.ViewHolder> {
public interface SortedAdapter {
@NonNull
String getSortString(int position);
}
private static final String NUMBERS = "0123456789";
private SortedAdapter mAdapter;
private boolean mCombineNumeric;
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView character;
public ViewHolder(View itemView) {
super(itemView);
character = (TextView) itemView.findViewById(R.id.character);
}
}
public AlphanumericHeaderAdapter(SortedAdapter adapter) {
this(adapter, true);
}
public AlphanumericHeaderAdapter(SortedAdapter adapter, boolean combineNumeric) {
this.mAdapter = adapter;
this.mCombineNumeric = combineNumeric;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.header_alphanumeric, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder headerViewHolder, int position) {
String sortString = mAdapter.getSortString(position).toUpperCase();
if (sortString.isEmpty())
headerViewHolder.itemView.setVisibility(View.GONE);
else {
CharSequence character = sortString.subSequence(0, 1);
if (mCombineNumeric && NUMBERS.contains(character))
character = "0-9";
headerViewHolder.character.setText(character);
headerViewHolder.itemView.setVisibility(View.VISIBLE);
}
}
@Override
public long getHeaderId(int position) {
String sortString = mAdapter.getSortString(position).toUpperCase();
if (sortString.isEmpty())
return Integer.MAX_VALUE;
CharSequence character = sortString.subSequence(0, 1);
if (mCombineNumeric && NUMBERS.contains(character))
return "0-9".hashCode();
return sortString.charAt(0);
}
}