package ru.ltst.u2020mvp.ui.logs;
import android.content.Context;
import android.support.annotation.DrawableRes;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.Bind;
import ru.ltst.u2020mvp.R;
import ru.ltst.u2020mvp.data.LumberYard.Entry;
import ru.ltst.u2020mvp.ui.misc.BindableAdapter;
import rx.functions.Action1;
final class LogAdapter extends BindableAdapter<Entry> implements Action1<Entry> {
private List<Entry> logs;
public LogAdapter(Context context) {
super(context);
logs = Collections.emptyList();
}
public void setLogs(List<Entry> logs) {
this.logs = new ArrayList<>(logs);
}
@Override
public void call(Entry entry) {
logs.add(entry);
notifyDataSetChanged();
}
@Override
public int getCount() {
return logs.size();
}
@Override
public Entry getItem(int i) {
return logs.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View newView(LayoutInflater inflater, int position, ViewGroup container) {
View view = inflater.inflate(R.layout.debug_logs_list_item, container, false);
LogItemViewHolder viewHolder = new LogItemViewHolder(view);
view.setTag(viewHolder);
return view;
}
@Override
public void bindView(Entry item, int position, View view) {
LogItemViewHolder viewHolder = (LogItemViewHolder) view.getTag();
viewHolder.setEntry(item);
}
static final class LogItemViewHolder {
private final View rootView;
@Bind(R.id.debug_log_level)
TextView levelView;
@Bind(R.id.debug_log_tag)
TextView tagView;
@Bind(R.id.debug_log_message)
TextView messageView;
public LogItemViewHolder(View rootView) {
this.rootView = rootView;
ButterKnife.bind(this, rootView);
}
public void setEntry(Entry entry) {
rootView.setBackgroundResource(backgroundForLevel(entry.level));
levelView.setText(entry.displayLevel());
tagView.setText(entry.tag);
messageView.setText(entry.message);
}
}
public static
@DrawableRes
int backgroundForLevel(int level) {
switch (level) {
case Log.VERBOSE:
case Log.DEBUG:
return R.color.debug_log_accent_debug;
case Log.INFO:
return R.color.debug_log_accent_info;
case Log.WARN:
return R.color.debug_log_accent_warn;
case Log.ERROR:
case Log.ASSERT:
return R.color.debug_log_accent_error;
default:
return R.color.debug_log_accent_unknown;
}
}
}