package it.angelic.soulissclient.adapters; import android.app.Activity; import android.graphics.LinearGradient; import android.graphics.drawable.ClipDrawable; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.RoundRectShape; import android.support.v4.content.ContextCompat; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.BaseAdapter; import android.widget.ProgressBar; import android.widget.TextView; import java.util.List; import it.angelic.soulissclient.Constants; import it.angelic.soulissclient.R; import it.angelic.soulissclient.R.color; import it.angelic.soulissclient.helpers.SoulissPreferenceHelper; import it.angelic.soulissclient.model.SoulissNode; import it.angelic.soulissclient.util.FontAwesomeEnum; import it.angelic.soulissclient.util.FontAwesomeUtil; import it.angelic.soulissclient.util.SoulissUtils; public class NodesListAdapter extends BaseAdapter { private List<SoulissNode> nodi; private Activity context; private LayoutInflater mInflater; private SoulissPreferenceHelper opzioni; public NodesListAdapter(Activity context, List<SoulissNode> versio, SoulissPreferenceHelper opts) { mInflater = LayoutInflater.from(context); this.context = context; this.nodi = versio; opzioni = opts; } public int getCount() { // Hack lista vuota if (nodi == null || nodi.size() == 0) return 1; return nodi.size(); } public Object getItem(int position) { return nodi.get(position); } public long getItemId(int position) { return position; } public List<SoulissNode> getNodes() { return nodi; } public void setNodes(List<SoulissNode> in) { nodi = in; } public View getView(int position, View convertView, ViewGroup parent) { NodeViewHolder holder; if (convertView == null) { // ProgressBar sfumata final ShapeDrawable pgDrawable = new ShapeDrawable(new RoundRectShape(Constants.roundedCorners, null, null)); final LinearGradient gradient = new LinearGradient(0, 0, 250, 0, ContextCompat.getColor(context, color.aa_red), ContextCompat.getColor(context, R.color.aa_green), android.graphics.Shader.TileMode.CLAMP); convertView = mInflater.inflate(R.layout.listview, parent, false); holder = new NodeViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.TextView01); holder.textTyp = (TextView) convertView.findViewById(R.id.TextViewTypicals); holder.textHlt = (TextView) convertView.findViewById(R.id.TextViewHealth); holder.image = (TextView) convertView.findViewById(R.id.node_icon); holder.hlt = (ProgressBar) convertView.findViewById(R.id.progressBarHealth); holder.hlt.setIndeterminate(false); holder.hlt.setMax(50); holder.hlt.setProgress(20); holder.hlt.setProgress(0); holder.hlt.setMax(Constants.MAX_HEALTH); holder.hlt.setBackgroundResource(android.R.drawable.progress_horizontal); // pgDrawable.getPaint().setStrokeWidth(3); pgDrawable.getPaint().setDither(true); pgDrawable.getPaint().setShader(gradient); ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL); // Rect bounds = holder.hlt.getProgressDrawable().getBounds(); holder.hlt.setProgressDrawable(progress); // holder.hlt.getProgressDrawable().setBounds(bounds); convertView.setTag(holder); } else { holder = (NodeViewHolder) convertView.getTag(); } if (nodi.size() == 0) { FontAwesomeUtil.prepareFontAweTextView(context, holder.image, FontAwesomeEnum.fa_exclamation_triangle.getFontName()); //holder.image.setImageResource(android.R.drawable.ic_dialog_alert); holder.image.setTextColor(context.getResources().getColor(R.color.aa_yellow)); holder.text.setText(context.getResources().getString(R.string.node_empty)); holder.textTyp.setText(context.getResources().getString(R.string.dialog_notinited_db)); holder.hlt.setVisibility(View.INVISIBLE); //holder.evidenza.setBackgroundColor(context.getResources().getColor(color.trans_black)); return convertView; } holder.data = nodi.get(position); holder.text.setText(nodi.get(position).getNiceName()); // holder.text.setTextAppearance(context, R.style.CodeFontTitle); // Progress = health holder.hlt.setProgress(0); holder.hlt.setProgress(nodi.get(position).getHealth()); /* Dimensioni del testo settate dalle opzioni */ // holder.textTyp.setTextSize(TypedValue.COMPLEX_UNIT_SP,holder.textTyp.getTextSize() // + opzioni.getListDimensTesto()); // holder.textTyp.setTextAppearance(context, R.style.CodeFontMain); holder.textTyp.setText(context.getResources().getQuantityString(R.plurals.Devices, nodi.get(position).getActiveTypicals().size(), nodi.get(position).getActiveTypicals().size()) + " - " + context.getString(R.string.update) + " " + SoulissUtils.getTimeAgo(nodi.get(position).getRefreshedAt())); if (opzioni.isLightThemeSelected()) { holder.textTyp.setTextColor(ContextCompat.getColor(context, R.color.black)); holder.text.setTextColor(ContextCompat.getColor(context, R.color.black)); holder.textHlt.setTextColor(ContextCompat.getColor(context, R.color.black)); } /* Icona del nodo */ //if (holder.data.getIconResourceId() != 0) FontAwesomeUtil.prepareFontAweTextView(context, holder.image, holder.data.getIconResourceId()); //else // FontAwesomeUtil.prepareFontAweTextView(context, holder.image, FontAwesomeEnum.fa_microchip.getFontName()); if (opzioni.getTextFx()) { Animation a2 = AnimationUtils.loadAnimation(context, R.anim.alpha); a2.reset(); // a2.setStartTime(System.currentTimeMillis() + 400 * position); a2.setStartOffset(250 * position); // Animazione immagine holder.image.clearAnimation(); holder.image.startAnimation(a2); // holder.text.clearAnimation(); // holder.text.startAnimation(a2); } return convertView; } public static class NodeViewHolder { public SoulissNode data; TextView text; TextView textTyp; TextView textHlt; ProgressBar hlt; TextView image; int imageRes; } }