package warmupdaterapp.listadapters; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import warmupdaterapp.ui.R; import java.util.List; import warmupdaterapp.customTypes.ThemeList; import warmupdaterapp.misc.Constants; public class ThemeListAdapter<T> extends ArrayAdapter<T> { private final LayoutInflater _inflater; public ThemeListAdapter(Context context, List<T> objects) { super(context, android.R.layout.simple_list_item_1, objects); _inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public View getDropDownView(int position, View convertView, ViewGroup parent) { return getView(position, convertView, parent); } public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; ThemeListViewWrapper wrapper; if (row == null) { row = _inflater.inflate(R.layout.itemtemplate_themelist, null); wrapper = new ThemeListViewWrapper(row); row.setTag(wrapper); } else { wrapper = (ThemeListViewWrapper) row.getTag(); } ThemeList info = (ThemeList) this.getItem(position); wrapper.getThemeNameView().setText(info.name); wrapper.getThemeUriView().setText(info.url.toString()); if (!info.enabled) { wrapper.getImageDrawable().mutate().setAlpha(Constants.THEME_LIST_ITEM_DISABLED_ALPHA); wrapper.getThemeNameView().setTextColor(Color.GRAY); wrapper.getThemeUriView().setTextColor(Color.GRAY); } //We need an else if otherwise the disabled themes will also be yellow else if (info.featured) { //Mark featured Themes wrapper.getThemeNameView().setTextColor(Color.YELLOW); wrapper.getThemeUriView().setTextColor(Color.YELLOW); } else { wrapper.getThemeNameView().setTextColor(Color.WHITE); wrapper.getThemeUriView().setTextColor(Color.WHITE); } return row; } } //Class that Holds the Ids, so we have not to call findViewById each time which costs a lot of ressources class ThemeListViewWrapper { private final View base; private TextView ThemeListName = null; private TextView ThemeListUri = null; private ImageView image = null; private Drawable imageDrawable = null; public ThemeListViewWrapper(View base) { this.base = base; } public TextView getThemeNameView() { if (ThemeListName == null) { ThemeListName = (TextView) base.findViewById(R.id.txtThemeName); } return ThemeListName; } public TextView getThemeUriView() { if (ThemeListUri == null) { ThemeListUri = (TextView) base.findViewById(R.id.txtThemeUri); } return ThemeListUri; } void getImage() { if (image == null) { image = (ImageView) base.findViewById(R.id.ThemeListImage); } } public Drawable getImageDrawable() { if (image == null) getImage(); if (imageDrawable == null) { imageDrawable = image.getDrawable(); } return imageDrawable; } }