package com.sunlightlabs.android.congress.fragments; import java.util.Date; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.sunlightlabs.android.congress.R; import com.sunlightlabs.android.congress.notifications.Footer; import com.sunlightlabs.android.congress.notifications.Subscriber; import com.sunlightlabs.android.congress.notifications.Subscription; import com.sunlightlabs.android.congress.tasks.LoadBillTask; import com.sunlightlabs.android.congress.utils.DateAdapterHelper; import com.sunlightlabs.android.congress.utils.FragmentUtils; import com.sunlightlabs.android.congress.utils.Utils; import com.sunlightlabs.congress.models.Bill; import com.sunlightlabs.congress.models.CongressException; public class BillActionFragment extends ListFragment implements LoadBillTask.LoadsBill, DateAdapterHelper.StickyHeader { private Bill bill; public static BillActionFragment create(Bill bill) { BillActionFragment frag = new BillActionFragment(); Bundle args = new Bundle(); args.putSerializable("bill", bill); frag.setArguments(args); frag.setRetainInstance(true); return frag; } public BillActionFragment() {} @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); bill = (Bill) args.getSerializable("bill"); loadBill(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.list_footer, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); FragmentUtils.setLoading(this, R.string.bill_history_loading); if (bill.actions != null) displayBill(); } @Override public void onResume() { super.onResume(); if (bill.actions != null) setupSubscription(); } private void setupSubscription() { Footer.setup(this, new Subscription(bill.id, Subscriber.notificationName(bill), "ActionsBillSubscriber", bill.id), bill.actions); } public void loadBill() { new LoadBillTask(this, bill.id).execute("actions"); } public void onLoadBill(Bill bill) { this.bill.actions = bill.actions; if (isAdded()) displayBill(); } public void onLoadBill(CongressException exception) { if (isAdded()) FragmentUtils.showRefresh(this, R.string.error_connection); } public void displayBill() { if (bill.actions != null && bill.actions.size() > 0) setListAdapter(new BillActionAdapter(this).adapterFor(bill.actions)); else FragmentUtils.showEmpty(this, R.string.bill_actions_empty); setupSubscription(); } static class BillActionAdapter extends DateAdapterHelper<Bill.Action> { public BillActionAdapter(ListFragment context) { super(context); } @Override public Date dateFor(Bill.Action action) { return action.acted_at; } @Override public View contentView(Bill.Action action) { View view = inflater.inflate(R.layout.bill_action, null); String text = action.text; if (!text.endsWith(".")) text += "."; String type = action.type; if (type.equals("vote") || type.equals("vote2") || type.equals("vote-aux") || type.equals("vetoed") || type.equals("enacted")) text = "<b>" + text + "</b>"; ((TextView) view).setText(Html.fromHtml(text)); return view; } @Override public void updateStickyHeader(Date date, View view, TextView left, TextView right) { String nearbyDate = Utils.nearbyDate(date); String fullDate = Utils.fullDateThisYear(date); if (nearbyDate != null) { left.setText(nearbyDate); right.setText(fullDate); } else { left.setText(fullDate); right.setText(""); } } } }