package what.whatandroid.search;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import api.search.user.User;
import what.whatandroid.R;
import what.whatandroid.callbacks.ViewUserCallbacks;
/**
* Adapter for viewing a list of user search results
*/
public class UserSearchAdapter extends ArrayAdapter<User> implements AdapterView.OnItemClickListener {
private final LayoutInflater inflater;
/**
* Callbacks to view the selected user
*/
private ViewUserCallbacks callbacks;
/**
* Construct the empty adapter. a new search can be set to be viewed by calling viewSearch
*
* @param context context to create the adapter in. Must implement ViewUserCallbacks
* @param footer loading indicator footer
*/
public UserSearchAdapter(Context context, View footer){
super(context, R.layout.list_user_search);
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
try {
callbacks = (ViewUserCallbacks)context;
}
catch (ClassCastException e){
throw new ClassCastException(context.toString() + " must implement ViewUserCallbacks");
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView != null){
holder = (ViewHolder)convertView.getTag();
}
else {
convertView = inflater.inflate(R.layout.list_user_search, parent, false);
holder = new ViewHolder();
holder.userName = (TextView)convertView.findViewById(R.id.username);
holder.userClass = (TextView)convertView.findViewById(R.id.user_class);
holder.donor = convertView.findViewById(R.id.donor);
holder.warned = convertView.findViewById(R.id.warned);
holder.banned = convertView.findViewById(R.id.banned);
convertView.setTag(holder);
}
User user = getItem(position);
holder.userName.setText(user.getUsername());
holder.userClass.setText(user.getUserClass());
if (user.isDonor()){
holder.donor.setVisibility(View.VISIBLE);
}
else {
holder.donor.setVisibility(View.GONE);
}
if (user.isWarned()){
holder.warned.setVisibility(View.VISIBLE);
}
else {
holder.warned.setVisibility(View.GONE);
}
if (!user.isEnabled()){
holder.banned.setVisibility(View.VISIBLE);
}
else {
holder.banned.setVisibility(View.GONE);
}
return convertView;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
//Clicking the footer gives us an out of bounds click event, so subtract one to account for this
if (position - 1 < getCount()){
callbacks.viewUser(getItem(position - 1).getUserId().intValue());
}
}
/**
* View holder for various information about the users
*/
private static class ViewHolder {
public TextView userName, userClass;
public View donor, warned, banned;
}
}