package com.njtransit; import java.text.SimpleDateFormat; import java.util.Calendar; import android.app.Activity; import android.app.DatePickerDialog; import android.app.DatePickerDialog.OnDateSetListener; import android.content.DialogInterface; import android.content.Intent; import android.content.DialogInterface.OnDismissListener; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.DatePicker; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.njtransit.domain.Station; import com.njtransit.rail.R; public class MainActivity extends SchedulerActivity { public static int DEPARTURE_REQUEST_CODE = 1, ARRIVAL_REQUEST_CODE = 2; private TextView departureText, arrivalText; private View getSchedule; private ImageView getScheduleImage; private DatePickerDialog datePickDialog; private boolean needDatePickDialog; private Calendar minDate; private Calendar maxDate; private TextView departureDateText; private SimpleDateFormat DF = new SimpleDateFormat("M/d/yy"); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { Station station = getSchedulerContext().getStation( data.getIntExtra("stationId", -1)); if (requestCode == DEPARTURE_REQUEST_CODE) { getSchedulerContext().setDepartureStation(station); trackEvent("station-depart", "selected", station .getName(), station.getId()); } else { getSchedulerContext().setArrivalStation(station); trackEvent("station-arrive", "selected", station .getName(), station.getId()); } } Station departure = getSchedulerContext().getDepartureStation(); Station arrival = getSchedulerContext().getArrivalStation(); if (departure != null) { departureText.setText(departure.getName()); } if (arrival != null) { arrivalText.setText(arrival.getName()); } if (departure != null && arrival != null) { getSchedule.setEnabled(true); getScheduleImage.setVisibility(View.VISIBLE); } else { getScheduleImage.setVisibility(View.INVISIBLE); getSchedule.setEnabled(false); } Calendar now = Calendar.getInstance(); Calendar dept = getSchedulerContext().getDepartureDate(); if(dept!=null) { int year = dept.get(Calendar.YEAR); int monthOfYear = dept.get(Calendar.MONTH); int dayOfMonth = dept.get(Calendar.DAY_OF_MONTH); if(!(now.get(Calendar.YEAR)==year && now.get(Calendar.MONTH)==monthOfYear && now.get(Calendar.DAY_OF_MONTH)==dayOfMonth)) { departureDateText.setVisibility(View.VISIBLE); departureDateText.setText(DF.format(dept.getTime())); } else { departureDateText.setVisibility(View.GONE); } } else { departureDateText.setVisibility(View.GONE); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.jumper); if(savedInstanceState!=null) { return; } RelativeLayout btn = (RelativeLayout) findViewById(R.id.departure); departureText = (TextView) findViewById(R.id.departureText); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { trackEvent("departure-clicked", "button", "clicked", 0); Intent intent = new Intent(getApplicationContext(), StationListActivity.class); startActivityForResult(intent, DEPARTURE_REQUEST_CODE); } }); RelativeLayout arrival = (RelativeLayout) findViewById(R.id.arrival); arrivalText = (TextView) findViewById(R.id.arrivalText); arrival.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { trackEvent("arrival-clicked", "button", "clicked", 1); Intent intent = new Intent(getApplicationContext(), StationListActivity.class); startActivityForResult(intent, ARRIVAL_REQUEST_CODE); } }); getSchedule = (RelativeLayout) findViewById(R.id.get_schedule); getSchedule.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { SchedulerApplication sc = getSchedulerContext(); trackEvent("get-schedule-clicked", "button", sc .getDepartureStation().getName() + " to " + sc.getArrivalStation().getName(), 2); Intent intent = new Intent(getApplicationContext(), StopActivity.class); startActivity(intent); } }); getScheduleImage = (ImageView) findViewById(R.id.getScheduleChevron); departureDateText = (TextView)findViewById(R.id.departureDate); trackPageView(getClass().getSimpleName()); trackPageView("device/"+getSchedulerContext().getDeviceInformation().toString()); minDate = Calendar.getInstance(); maxDate = Calendar.getInstance(); minDate.setTimeInMillis(Root .getScheduleStartDate(getApplicationContext())); maxDate.setTimeInMillis(Root .getScheduleEndDate(getApplicationContext())); Integer depart = Root.getLastDepartureStation(this); Integer arrive = Root.getLastArrivalStation(this); if(depart >=0 && arrive >=0) { Station _depart = getSchedulerContext().getStation(depart); Station _arrive = getSchedulerContext().getStation(arrive); if(_depart!=null && _arrive!=null) { getSchedulerContext().setArrivalStation(_arrive); getSchedulerContext().setDepartureStation(_depart); onActivityResult(0, -0, null); } } } @Override public void onBackPressed() { super.onBackPressed(); finish(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); trackEvent("menu-click", "MenuButton", "click", 1); MenuItem cal = menu.add(Menu.NONE, 1, Menu.FIRST, getString(R.string.date_pick)); MenuItem reverse = menu.add(Menu.NONE,2,2,getString(R.string.reverse)); reverse.setIcon(R.drawable.signpost); cal.setIcon(R.drawable.clock); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == 1) { trackEvent("menu-click", "MenuButton", item.getTitle() .toString(), item.getItemId()); showDatePicker(); } if(item.getItemId()==2) { trackEvent("menu-click","MenuButton", item.getTitle().toString(), item.getItemId()); getSchedulerContext().reverseTrip(); onActivityResult(-1, Activity.RESULT_CANCELED, null); } return super.onOptionsItemSelected(item); } private void showDatePicker() { final Calendar cal; Calendar departureDate = getSchedulerContext().getDepartureDate(); if (departureDate != null) { cal = departureDate; } else { cal = Calendar.getInstance(); } datePickDialog = new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, monthOfYear); cal.set(Calendar.DAY_OF_MONTH, dayOfMonth); getSchedulerContext().setDepartureDate(cal); onActivityResult(-1, Activity.RESULT_CANCELED, null); //if(now.) needDatePickDialog = false; } }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal .get(Calendar.DAY_OF_MONTH)) { @Override public void onDateChanged(DatePicker view, int year, int month, int day) { Calendar newDate = Calendar.getInstance(); newDate.set(Calendar.YEAR, year); newDate.set(Calendar.MONTH, month); newDate.set(Calendar.DAY_OF_MONTH, day); if (newDate.getTimeInMillis()<minDate.getTimeInMillis()) { Toast.makeText(getApplicationContext(), "Date was out of schedule range, reset.", Toast.LENGTH_LONG).show(); updateDate(minDate.get(Calendar.YEAR), minDate.get(Calendar.MONDAY), minDate.get(Calendar.DAY_OF_MONTH)); } else if (newDate.getTimeInMillis()>maxDate.getTimeInMillis()) { Toast.makeText(getApplicationContext(), "Date was out of schedule range, reset.", Toast.LENGTH_LONG).show(); updateDate(maxDate.get(Calendar.YEAR), maxDate.get(Calendar.MONDAY), maxDate.get(Calendar.DAY_OF_MONTH)); } } }; datePickDialog.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { needDatePickDialog = false; } }); needDatePickDialog = true; datePickDialog.show(); } @Override protected void onPause() { super.onPause(); if (datePickDialog != null) { datePickDialog.dismiss(); } } @Override protected void onResume() { super.onResume(); if (needDatePickDialog) { datePickDialog.show(); } } @Override public void onAttachedToWindow() { onActivityResult(-1, Activity.RESULT_CANCELED, null); super.onAttachedToWindow(); } }