package com.artemzin.qualitymatters.ui.adapters;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.artemzin.qualitymatters.R;
import java.util.List;
import static java.util.Collections.emptyList;
import static java.util.Collections.unmodifiableList;
public class DeveloperSettingsSpinnerAdapter<T extends DeveloperSettingsSpinnerAdapter.SelectionOption> extends BaseAdapter {
@NonNull
private List<T> selectionOptions = emptyList();
@NonNull
private final LayoutInflater layoutInflater;
public DeveloperSettingsSpinnerAdapter(@NonNull LayoutInflater layoutInflater) {
this.layoutInflater = layoutInflater;
}
public DeveloperSettingsSpinnerAdapter<T> setSelectionOptions(@NonNull List<? extends T> selectionOptions) {
this.selectionOptions = unmodifiableList(selectionOptions);
notifyDataSetChanged();
return this;
}
@Override
public int getCount() {
return selectionOptions.size();
}
@Override
@NonNull
public T getItem(int position) {
return selectionOptions.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
@NonNull
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.list_developer_settings_spinner_item, parent, false);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.bindItem(selectionOptions.get(position));
return convertView;
}
@Override
@NonNull
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.list_developer_settings_spinner_drop_down_item, parent, false);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.bindItem(selectionOptions.get(position));
return convertView;
}
static class ViewHolder {
@NonNull
private final TextView titleTextView;
ViewHolder(@NonNull View itemView) {
titleTextView = (TextView) itemView.findViewById(R.id.list_developer_settings_spinner_item_title_text_view);
}
public void bindItem(@NonNull SelectionOption selectionOption) {
titleTextView.setText(selectionOption.title());
}
}
public interface SelectionOption {
@NonNull
String title();
}
}