package com.sunlightlabs.android.congress;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import com.sunlightlabs.android.congress.fragments.BillListFragment;
import com.sunlightlabs.android.congress.fragments.LegislatorLoaderFragment;
import com.sunlightlabs.android.congress.fragments.LegislatorProfileFragment;
import com.sunlightlabs.android.congress.fragments.RollListFragment;
import com.sunlightlabs.android.congress.utils.ActionBarUtils;
import com.sunlightlabs.android.congress.utils.ActionBarUtils.HasActionMenu;
import com.sunlightlabs.android.congress.utils.Analytics;
import com.sunlightlabs.android.congress.utils.Database;
import com.sunlightlabs.android.congress.utils.TitlePageAdapter;
import com.sunlightlabs.android.congress.utils.Utils;
import com.sunlightlabs.congress.models.CongressException;
import com.sunlightlabs.congress.models.Legislator;
public class LegislatorPager extends FragmentActivity implements HasActionMenu {
public String bioguide_id;
public Legislator legislator;
public String tab;
public Database database;
public Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pager_titled);
Analytics.init(this);
Bundle extras = getIntent().getExtras();
bioguide_id = extras.getString("bioguide_id");
legislator = (Legislator) extras.getSerializable("legislator");
tab = extras.getString("tab");
setupControls();
if (legislator == null)
LegislatorLoaderFragment.start(this);
else
onLoadLegislator(legislator);
}
public void onLoadLegislator(Legislator legislator) {
this.legislator = legislator;
findViewById(R.id.pager_container).setVisibility(View.VISIBLE);
findViewById(android.R.id.empty).setVisibility(View.GONE);
setupDatabase();
setupButtons();
setupPager();
}
public void onLoadLegislator(CongressException exception) {
Utils.showRefresh(this, R.string.legislator_loading_error);
}
private void refresh() {
this.legislator = null;
Utils.setLoading(this, R.string.legislator_loading);
Utils.showLoading(this);
LegislatorLoaderFragment.start(this, true);
}
public void setupControls() {
ActionBarUtils.setTitle(this, R.string.app_name);
findViewById(android.R.id.empty).setVisibility(View.VISIBLE);
findViewById(R.id.pager_container).setVisibility(View.GONE);
Utils.setLoading(this, R.string.legislator_loading);
((Button) findViewById(R.id.refresh)).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
refresh();
}
});
}
private void setupPager() {
TitlePageAdapter adapter = new TitlePageAdapter(this);
adapter.add("info", R.string.tab_profile, LegislatorProfileFragment.create(legislator));
adapter.add("votes", R.string.tab_votes, RollListFragment.forLegislator(legislator));
adapter.add("bills", R.string.tab_bills, BillListFragment.forSponsor(legislator));
if (tab != null) adapter.selectPage(tab);
}
private void setupDatabase() {
database = new Database(this);
database.open();
cursor = database.getLegislator(legislator.bioguide_id);
startManagingCursor(cursor);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (database != null && database.isOpen())
database.close();
}
public void setupButtons() {
String titledName = legislator.titledName();
ActionBarUtils.setTitle(this, titledName, new Intent(this, MenuLegislators.class));
if (titledName.length() >= 23)
ActionBarUtils.setTitleSize(this, 16);
ActionBarUtils.setActionButton(this, R.id.action_1, R.drawable.star_off, new View.OnClickListener() {
public void onClick(View v) {
toggleDatabaseFavorite();
}
});
toggleFavoriteStar(cursor.getCount() == 1);
ActionBarUtils.setActionMenu(this, R.menu.legislator);
}
private void toggleFavoriteStar(boolean enabled) {
if (enabled)
ActionBarUtils.setActionIcon(this, R.id.action_1, R.drawable.star_on);
else
ActionBarUtils.setActionIcon(this, R.id.action_1, R.drawable.star_off);
}
private void toggleDatabaseFavorite() {
String id = legislator.bioguide_id;
cursor.requery();
if (cursor.getCount() == 1) {
if (database.removeLegislator(id) != 0) {
toggleFavoriteStar(false);
Analytics.removeFavoriteLegislator(this, id);
} else
Utils.alert(this, "Problem unstarring legislator.");
} else {
if (database.addLegislator(legislator) != -1) {
toggleFavoriteStar(true);
Analytics.addFavoriteLegislator(this, id);
} else
Utils.alert(this, "Problem starring legislator.");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.legislator, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
menuSelected(item);
return true;
}
@Override
public void menuSelected(MenuItem item) {
if (legislator == null) return; // safety valve (only matters on pre-4.0 devices)
switch(item.getItemId()) {
case R.id.addcontact:
Analytics.legislatorContacts(this, legislator.bioguide_id);
openContactAdd();
break;
case R.id.govtrack:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Legislator.govTrackUrl(legislator.govtrack_id))));
break;
case R.id.opencongress:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Legislator.openCongressUrl(legislator.govtrack_id))));
break;
case R.id.bioguide:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Legislator.bioguideUrl(legislator.bioguide_id))));
break;
}
}
private void openContactAdd() {
Intent i = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
i.putExtra(ContactsContract.Intents.Insert.NAME, this.legislator.getName());
if (!TextUtils.isEmpty(this.legislator.phone)) {
i.putExtra(ContactsContract.Intents.Insert.PHONE, this.legislator.phone);
i.putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK);
}
i.putExtra(ContactsContract.Intents.Insert.JOB_TITLE, this.legislator.fullTitle());
startActivity(i);
}
@Override
public void onStart() {
super.onStart();
Analytics.start(this);
}
@Override
public void onStop() {
super.onStop();
Analytics.stop(this);
}
}