package com.sunlightlabs.android.congress.fragments; import java.util.HashMap; import java.util.Map; import android.content.Context; import android.database.Cursor; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.sunlightlabs.android.congress.R; import com.sunlightlabs.android.congress.tasks.LoadPhotoTask; import com.sunlightlabs.android.congress.utils.Database; import com.sunlightlabs.android.congress.utils.LegislatorImage; import com.sunlightlabs.android.congress.utils.Utils; import com.sunlightlabs.congress.models.Legislator; public class MenuLegislatorsFragment extends ListFragment implements LoadPhotoTask.LoadsPhoto { private Map<String, LoadPhotoTask> loadPhotoTasks = new HashMap<String, LoadPhotoTask>(); private Map<String, ImageView> photoViews = new HashMap<String, ImageView>(); private Database database; private Cursor cursor; public static MenuLegislatorsFragment newInstance() { MenuLegislatorsFragment frag = new MenuLegislatorsFragment(); frag.setRetainInstance(true); return frag; } public MenuLegislatorsFragment() {} @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupDatabase(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.menu_legislators, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setupControls(); } public void setupDatabase() { database = new Database(getActivity()); database.open(); cursor = database.getLegislators(); } @Override public void onResume() { super.onResume(); if (cursor != null) cursor.requery(); setupControls(); } @Override public void onDestroy() { super.onDestroy(); database.close(); } private void setupControls() { if (cursor != null && cursor.getCount() > 0) { setListAdapter(new FavoriteLegislatorsAdapter(this, cursor)); getView().findViewById(R.id.menu_legislators_no_favorites).setVisibility(View.GONE); getListView().setVisibility(View.VISIBLE); } else { getView().findViewById(R.id.menu_legislators_no_favorites).setVisibility(View.VISIBLE); getListView().setVisibility(View.GONE); } } @Override public void onListItemClick(ListView l, View view, int position, long id) { startActivity(Utils.legislatorIntent(((Legislator) view.getTag()).bioguide_id)); } public void loadPhoto(String bioguide_id) { if (!loadPhotoTasks.containsKey(bioguide_id)) loadPhotoTasks.put(bioguide_id, (LoadPhotoTask) new LoadPhotoTask(this, LegislatorImage.PIC_LARGE, bioguide_id).execute(bioguide_id)); } @Override public Context getContext() { return getActivity(); } @Override public void onLoadPhoto(Drawable photo, Object tag) { if (!isAdded()) return; String bioguide_id = (String) tag; loadPhotoTasks.remove(bioguide_id); ImageView photoView = photoViews.get(bioguide_id); if (photoView != null) { if (photo != null) photoView.setImageDrawable(photo); else photoView.setImageResource(R.drawable.person); } } public class FavoriteLegislatorsAdapter extends CursorAdapter { MenuLegislatorsFragment fragment; LayoutInflater inflater; public FavoriteLegislatorsAdapter(MenuLegislatorsFragment fragment, Cursor cursor) { super(fragment.getActivity(), cursor); this.fragment = fragment; this.inflater = LayoutInflater.from(fragment.getActivity()); } @Override public void bindView(View view, Context context, Cursor cursor) { Legislator legislator = Database.loadLegislator(cursor); TextView name = (TextView) view.findViewById(R.id.name); name.setText(nameFor(legislator)); TextView position = (TextView) view.findViewById(R.id.position); position.setText(positionFor(legislator)); ImageView photo = (ImageView) view.findViewById(R.id.photo); LegislatorImage.setImageView(legislator.bioguide_id, LegislatorImage.PIC_LARGE, context, photo); view.setTag(legislator); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View view = inflater.inflate(R.layout.legislator_item, null); bindView(view, context, cursor); return view; } public String nameFor(Legislator legislator) { return legislator.last_name + ", " + legislator.firstName(); } public String positionFor(Legislator legislator) { String stateName = Utils.stateCodeToName(fragment.getActivity(), legislator.state); String district; if (legislator.title.equals("Sen")) district = "Senator"; else district = "District " + legislator.district; return legislator.party + " - " + stateName + " - " + district; } } }