package it.angelic.soulissclient.adapters; import android.app.Activity; import android.content.Intent; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.List; import java.util.Locale; import it.angelic.soulissclient.R; import it.angelic.soulissclient.SoulissDataService; import it.angelic.soulissclient.helpers.SoulissPreferenceHelper; import it.angelic.soulissclient.model.SoulissTypical; import it.angelic.soulissclient.util.FontAwesomeEnum; import it.angelic.soulissclient.util.FontAwesomeUtil; import it.angelic.soulissclient.util.SoulissUtils; public class TypicalsListAdapter extends BaseAdapter { Intent parentIntent; // private SoulissDBHelper dataSource; SoulissDataService mBoundService; private Activity context; private LayoutInflater mInflater; private SoulissPreferenceHelper opzioni; private List<SoulissTypical> tipici; public TypicalsListAdapter(Activity context, SoulissDataService serv, List<SoulissTypical> versio, Intent forExtra, SoulissPreferenceHelper op) { mInflater = LayoutInflater.from(context); this.context = context; this.tipici = versio; /*for (int i = 0; i < versio.length; i++) { if (versio[i].getCtx() == null) throw new RuntimeException("Non dovrebbe essere nullo, controlla il giro"); }*/ opzioni = op; parentIntent = forExtra; // dataSource = ds; mBoundService = serv; } public int getCount() { // Hack lista vuota if (tipici == null || tipici.size() == 0) return 1; return tipici.size(); } public Object getItem(int position) { return tipici.get(position); } public long getItemId(int position) { return position; } public List<SoulissTypical> getTypicals() { return tipici; } public void setTypicals(List<SoulissTypical> in) { tipici = in; } public View getView(int position, View convertView, final ViewGroup parent) { TypicalViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.listview_typical, parent, false); final View ccopy = convertView; holder = new TypicalViewHolder(); holder.expand = (ImageView) convertView.findViewById(R.id.imageButtonExpand); holder.textslot = (TextView) convertView.findViewById(R.id.TextViewSlot); holder.textUpdated = (TextView) convertView.findViewById(R.id.TextViewUpdated); holder.textStatus = (TextView) convertView.findViewById(R.id.textViewStatus); holder.textStatusVal = (TextView) convertView.findViewById(R.id.textViewStatusVal); holder.image = (TextView) convertView.findViewById(R.id.typ_awe_icon); holder.imageFav = (TextView) convertView.findViewById(R.id.imageButtonFav); holder.imageTag = (TextView) convertView.findViewById(R.id.imageButtonTag); holder.linearActionsLayout = (LinearLayout) convertView.findViewById(R.id.linearLayoutButtons); // linButton.removeAllViews(); convertView.setTag(holder); holder.expand.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ccopy.performLongClick(); } }); } else { holder = (TypicalViewHolder) convertView.getTag(); } //fuori da if-else per evitare #74 if (tipici.size() > 0) // magari e` vuoto holder.data = tipici.get(position); if (opzioni.isLightThemeSelected()) { holder.textslot.setTextColor(ContextCompat.getColor(context, R.color.black)); holder.textUpdated.setTextColor(ContextCompat.getColor(context, R.color.black)); holder.textStatus.setTextColor(ContextCompat.getColor(context, R.color.black)); holder.expand.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.overflow_dots)); holder.expand.setColorFilter(R.color.black); } /* Nodo vuota */ if (tipici.isEmpty()) { FontAwesomeUtil.prepareFontAweTextView(context, holder.image, FontAwesomeEnum.fa_exclamation_triangle.getFontName()); //holder.image.setImageResource(android.R.drawable.ic_dialog_alert); //holder.image.setColorFilter(ContextCompat.getColor(context, R.color.aa_yellow), // android.graphics.PorterDuff.Mode.SRC_ATOP); holder.textslot.setText(context.getResources().getString(R.string.node_empty)); holder.textStatus.setText(context.getResources().getString(R.string.node_empty_desc)); // holder.evidenza.setBackgroundColor(context.getResources().getColor(color.trans_black)); return convertView; } /* INFO slot e Alias Name */ holder.textslot.setText(tipici.get(position).getNiceName()); holder.textUpdated.setText(context.getString(R.string.update) + " " + SoulissUtils.getTimeAgo(tipici.get(position).getTypicalDTO().getRefreshedAt()) + " - " + context.getString(R.string.manual_slot) + ": " + tipici.get(position).getSlot()); holder.textStatus.setText(context.getResources().getString(R.string.typical).toUpperCase(Locale.getDefault()) + ": " + tipici.get(position).getTypicalDTO().getTypicalDec() + " - " + context.getResources().getString(R.string.status)); /* Icona del device */ FontAwesomeUtil.prepareFontAweTextView(context, holder.image, tipici.get(position).getIconResourceId()); //Preferito, TagId == 0 if (tipici.get(position).getTypicalDTO().isFavourite()) { FontAwesomeUtil.prepareMiniFontAweTextView(context, holder.imageFav, FontAwesomeEnum.fa_star_o.getFontName()); holder.imageFav.setVisibility(View.VISIBLE); } else { holder.imageFav.setVisibility(View.GONE); } //puo essere ANCHE tagged if (tipici.get(position).getTypicalDTO().isTagged()) { FontAwesomeUtil.prepareMiniFontAweTextView(context, holder.imageTag, FontAwesomeEnum.fa_tag.getFontName()); holder.imageTag.setVisibility(View.VISIBLE); } else { holder.imageTag.setVisibility(View.GONE); } tipici.get(position).setOutputDescView(holder.textStatusVal); holder.linearActionsLayout.removeAllViews(); // richiama l'overloaded del tipico relativo tipici.get(position).getActionsLayout(context, holder.linearActionsLayout); // linearActionsLayout.setVisibility(View.VISIBLE); if (opzioni.getTextFx()) { Animation a = AnimationUtils.loadAnimation(context, R.anim.scalerotale); a.reset(); a.setStartOffset(100 * position); // Animazione testo sotto holder.text.clearAnimation(); holder.image.startAnimation(a); } return convertView; } public SoulissDataService getmBoundService() { return mBoundService; } public void setmBoundService(SoulissDataService mBoundService2) { mBoundService = mBoundService2; } public static class TypicalViewHolder { public ImageView expand; public SoulissTypical data; TextView textStatus; TextView textStatusVal; TextView textslot; TextView textUpdated; LinearLayout linearActionsLayout; TextView image; TextView imageFav; TextView imageTag; } }