package com.ubergeek42.WeechatAndroid.adapters;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.content.DialogInterface;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.ubergeek42.WeechatAndroid.BuildConfig;
import com.ubergeek42.WeechatAndroid.R;
import com.ubergeek42.WeechatAndroid.WeechatActivity;
import com.ubergeek42.WeechatAndroid.relay.Buffer;
import com.ubergeek42.WeechatAndroid.relay.BufferNicklistEye;
import com.ubergeek42.WeechatAndroid.relay.Nick;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class NickListAdapter extends BaseAdapter implements BufferNicklistEye,
DialogInterface.OnDismissListener, DialogInterface.OnShowListener {
private static Logger logger = LoggerFactory.getLogger("NickListAdapter");
final private static boolean DEBUG = BuildConfig.DEBUG;
private final @NonNull
WeechatActivity activity;
private final @NonNull LayoutInflater inflater;
private final @NonNull Buffer buffer;
private @NonNull Nick[] nicks = new Nick[0];
private int defaultNickTextColor = 0;
private AlertDialog dialog;
public NickListAdapter(@NonNull WeechatActivity activity, @NonNull Buffer buffer) {
this.activity = activity;
this.inflater = LayoutInflater.from(activity);
this.buffer = buffer;
}
@Override
public int getCount() {
return nicks.length;
}
@Override
public Nick getItem(int position) {
return nicks[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = inflater.inflate(R.layout.select_dialog_item_material_2_lines, parent, false);
final TextView textView = (TextView) convertView;
if (defaultNickTextColor == 0)
defaultNickTextColor = textView.getTextColors().getDefaultColor();
Nick nick = getItem(position);
textView.setText(nick.prefix + nick.name);
int color = nick.away ? ContextCompat.getColor(convertView.getContext(), R.color.away_nick)
: defaultNickTextColor;
textView.setTextColor(color);
return convertView;
}
public void onNicklistChanged() {
if (DEBUG) logger.debug("onNicklistChanged()");
final Nick[] tmp = buffer.getNicksCopy();
final String nicklistCount = activity.getResources().getQuantityString(
R.plurals.nick_list_count, tmp.length, tmp.length);
final String title = activity.getString(R.string.nick_list_title,
buffer.shortName, nicklistCount);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
nicks = tmp;
notifyDataSetChanged();
dialog.setTitle(title);
}
});
}
@Override
public void onShow(DialogInterface dialog) {
if (DEBUG) logger.debug("onShow()");
this.dialog = (AlertDialog) dialog;
buffer.setBufferNicklistEye(this);
onNicklistChanged();
}
@Override
public void onDismiss(DialogInterface dialog) {
if (DEBUG) logger.debug("onDismiss()");
buffer.setBufferNicklistEye(null);
}
}