package com.etiennelawlor.loop.adapters;
import android.graphics.Typeface;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.etiennelawlor.loop.LoopApplication;
import com.etiennelawlor.loop.R;
import com.etiennelawlor.loop.utilities.FontCache;
import com.etiennelawlor.trestle.library.Regex;
import com.etiennelawlor.trestle.library.Span;
import com.etiennelawlor.trestle.library.Trestle;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by etiennelawlor on 5/23/15.
*/
public class SuggestionsAdapter extends BaseAdapter<String> {
// region Static Variables
private static String currentQuery = "";
private static Typeface font;
// endregion
// region Member Variables
private OnItemLongClickListener onItemLongClickListener;
private OnSearchSuggestionCompleteClickListener onSearchSuggestionCompleteClickListener;
// endregion
// region Interfaces
public interface OnItemLongClickListener {
void onItemLongClick(int position, View view);
}
public interface OnSearchSuggestionCompleteClickListener {
void onSearchSuggestionCompleteClickListener(int position, TextView textView);
}
// endregion
// region Constructors
public SuggestionsAdapter() {
super();
font = FontCache.getTypeface("Ubuntu-Bold.ttf", LoopApplication.getInstance().getApplicationContext());
}
// endregion
@Override
public int getItemViewType(int position) {
return ITEM;
}
@Override
protected RecyclerView.ViewHolder createHeaderViewHolder(ViewGroup parent) {
return null;
}
@Override
protected RecyclerView.ViewHolder createItemViewHolder(ViewGroup parent) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.suggestion, parent, false);
final SuggestionViewHolder holder = new SuggestionViewHolder(v);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int adapterPos = holder.getAdapterPosition();
if(adapterPos != RecyclerView.NO_POSITION){
if (onItemClickListener != null) {
onItemClickListener.onItemClick(adapterPos, holder.itemView);
}
}
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int adapterPos = holder.getAdapterPosition();
if(adapterPos != RecyclerView.NO_POSITION){
if (onItemLongClickListener != null) {
onItemLongClickListener.onItemLongClick(adapterPos, holder.itemView);
}
}
return true;
}
});
holder.suggestionCompleteImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int adapterPos = holder.getAdapterPosition();
if(adapterPos != RecyclerView.NO_POSITION){
if (onSearchSuggestionCompleteClickListener != null) {
onSearchSuggestionCompleteClickListener.onSearchSuggestionCompleteClickListener(adapterPos, holder.suggestionTextView);
}
}
}
});
return holder;
}
@Override
protected RecyclerView.ViewHolder createFooterViewHolder(ViewGroup parent) {
return null;
}
@Override
protected void bindHeaderViewHolder(RecyclerView.ViewHolder viewHolder) {
}
@Override
protected void bindItemViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
final SuggestionViewHolder holder = (SuggestionViewHolder) viewHolder;
final String suggestion = getItem(position);
if (!TextUtils.isEmpty(suggestion)) {
holder.bind(suggestion);
}
}
@Override
protected void bindFooterViewHolder(RecyclerView.ViewHolder viewHolder) {
}
@Override
protected void displayLoadMoreFooter() {
}
@Override
protected void displayErrorFooter() {
}
@Override
public void addFooter() {
}
// region Helper Methods
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
this.onItemLongClickListener = onItemLongClickListener;
}
public void setOnSearchSuggestionCompleteClickListener(OnSearchSuggestionCompleteClickListener onSearchSuggestionCompleteClickListener) {
this.onSearchSuggestionCompleteClickListener = onSearchSuggestionCompleteClickListener;
}
public void setCurrentQuery(String query){
currentQuery = query;
}
// endregion
// region Inner Classes
public static class SuggestionViewHolder extends RecyclerView.ViewHolder {
// region Views
@BindView(R.id.suggestion_tv)
TextView suggestionTextView;
@BindView(R.id.search_suggest_complete_iv)
ImageView suggestionCompleteImageView;
// endregion
// region Constructors
public SuggestionViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
// endregion
// region Helper Methods
private void bind(String suggestion){
setUpSuggestion(suggestionTextView, suggestion);
}
private void setUpSuggestion(TextView tv, String suggestion){
if(!TextUtils.isEmpty(suggestion)){
if(!TextUtils.isEmpty(currentQuery)){
CharSequence formattedSuggestion = Trestle.getFormattedText(
new Span.Builder(suggestion)
.regex(new Regex(currentQuery, Regex.CASE_INSENSITIVE))
.foregroundColor(ContextCompat.getColor(tv.getContext(), R.color.primary)) // Pass resolved color instead of resource id
.typeface(font)
.build());
tv.setText(formattedSuggestion);
} else {
tv.setText(suggestion);
}
}
}
// endregion
}
// endregion
}