package com.njtransit; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.Window; import com.njtransit.JumpDialog.OnJumpListener; import com.njtransit.StationListView.OnStationListener; import com.njtransit.domain.Station; import com.njtransit.rail.R; import com.njtransit.ui.adapter.StationAdapter; import java.util.HashSet; import java.util.Set; /** * List for display all the stations in a particular order. * * @author rgravener * */ public class StationListActivity extends SchedulerActivity implements OnJumpListener { private final Set<Character> stationLetters = new HashSet<Character>(); private StationListView stations; private boolean canJump; private boolean showingFavorites; private JumpDialog jumpDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.station_list_home); if(savedInstanceState!=null) { return; } final SchedulerApplication app = this.getSchedulerContext(); stations = (StationListView) findViewById(R.id.station_view); stations.setAdapter(new StationAdapter(this, R.layout.station_row, app.getStations(), app)); stations.setOnStationListener(new OnStationListener() { @Override public void onStationSelected(Station station) { Intent i = new Intent(); i.putExtra("stationId", station.getId()); setResult(RESULT_OK, i); finish(); } }); stations.setTextFilterEnabled(true); trackPageView(getClass().getSimpleName()); if(stations.getCount()>20) { canJump = true; jumpDialog = new JumpDialog(this, this) { @Override protected void onLetterSelect(String c) { trackEvent("jumps", "Button", c+"" , c.hashCode()); } @Override public void onBackPressed() { trackEvent("jump-cancelled", "Button", "back" , 0); super.onBackPressed(); } }.only(getStationLetters()); jumpDialog.show(); trackEvent("default-jump", "popUp", "jump", 0); } else { trackEvent("no-jump", "none", "none", 1); } } private void showFavorites() { showingFavorites = true; stations.getStationAdapter().clear(); for(Station s : getSchedulerContext().getAdapter().getMostVisitedStations(getSchedulerContext(),System.currentTimeMillis())) { stations.getStationAdapter().add(s); } trackPageView("Favorites"); } private void clearFavorites() { stations.getStationAdapter().clear(); for(Station s : getSchedulerContext().getStations()) { stations.getStationAdapter().add(s); } showingFavorites = false; } @Override public void onJump(String c) { if("FAV".equals(c)) { showFavorites(); return; } if(showingFavorites) { clearFavorites(); } Object[] sections = stations.getStationAdapter().getSections(); for(int i = 0; i < sections.length; i++) { if(sections[i].equals(c)) { int pos = stations.getStationAdapter().getPositionForSection(i); stations.setSelectionFromTop(pos,0); break; } } } private Set<Character> getStationLetters() { synchronized (this) { if (stationLetters.isEmpty()) { for (Station s : getSchedulerContext().getStations()) { stationLetters.add(s.getName().charAt(0)); } } } return stationLetters; } private MenuItem jump; private MenuItem favorites; private MenuItem clearFavorites; @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); trackEvent("menu-click", "MenuButton", "click", 0); jump = menu.add(Menu.NONE,1,Menu.FIRST, getString(R.string.abc)); jump.setIcon(R.drawable.small_tiles); favorites = menu.add(Menu.NONE,2,Menu.FIRST, getString(R.string.favorites)); favorites.setIcon(R.drawable.favorites); clearFavorites = menu.add(Menu.NONE,3,Menu.FIRST,getString(R.string.clear_favorites)); clearFavorites.setIcon(R.drawable.clear_favorites2); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId()==1) { trackEvent("user-jump", "MenuItem", "click", item.getItemId()); jumpDialog.show(); }else if(item.getItemId()==2) { showFavorites(); trackEvent("show-favorites","MenuItem","click",item.getItemId()); }else if(item.getItemId()==3) { clearFavorites(); } return super.onOptionsItemSelected(item); } @Override public boolean onPrepareOptionsMenu(Menu menu) { favorites.setVisible(!showingFavorites); jump.setVisible(canJump); clearFavorites.setVisible(showingFavorites); return super.onPrepareOptionsMenu(menu); } }