package com.papagiannis.tuberun; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.InvalidPropertiesFormatException; import java.util.List; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.app.DatePickerDialog.OnDateSetListener; import android.app.Dialog; import android.app.ProgressDialog; import android.app.TabActivity; import android.app.TimePickerDialog; import android.app.TimePickerDialog.OnTimeSetListener; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.text.Editable; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.DatePicker; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.Spinner; import android.widget.TabHost; import android.widget.TabHost.TabContentFactory; import android.widget.TextView; import android.widget.TimePicker; import com.papagiannis.tuberun.claims.Claim; import com.papagiannis.tuberun.claims.ClaimStore; import com.papagiannis.tuberun.fetchers.ClaimFetcher; import com.papagiannis.tuberun.fetchers.Observer; @SuppressWarnings("deprecation") public class ClaimActivity extends TabActivity implements Observer { private static final String LIST1_TAB_TAG = "Overview"; private static final String LIST2_TAB_TAG = "Journey"; private static final String LIST3_TAB_TAG = "Delay"; private static final String LIST4_TAB_TAG = "Personal"; private static final String LIST5_TAB_TAG = "Ticket"; private static final Integer MESSAGE_WAIT = -1; private static final Integer MESSAGE_NOTICE = -2; private static final Integer MESSAGE_PREFILL= -3; private static final Integer MESSAGE_SENDWARNING=-4; private TabHost tabHost; Claim claim; ClaimFetcher fetcher; ClaimStore store; SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE, dd/MM/yyyy"); SimpleDateFormat dateFormatSimple = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm"); SimpleDateFormat durationFormat = new SimpleDateFormat("mm"); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.claim); Button back_button = (Button) findViewById(R.id.back_button); Button logo_button = (Button) findViewById(R.id.logo_button); OnClickListener back_listener = new OnClickListener() { @Override public void onClick(View v) { finish(); } }; back_button.setOnClickListener(back_listener); logo_button.setOnClickListener(back_listener); tabHost = getTabHost(); // add views to tab host tabHost.addTab(tabHost.newTabSpec(LIST1_TAB_TAG). setIndicator(createTabView(this, LIST1_TAB_TAG)) .setContent(new TabContentFactory() { public View createTabContent(String arg0) { return (LinearLayout) findViewById(R.id.overview_tab); } })); tabHost.addTab(tabHost.newTabSpec(LIST2_TAB_TAG). setIndicator(createTabView(this, LIST2_TAB_TAG)) .setContent(new TabContentFactory() { public View createTabContent(String arg0) { return (LinearLayout) findViewById(R.id.journey_tab); } })); tabHost.addTab(tabHost.newTabSpec(LIST3_TAB_TAG). setIndicator(createTabView(this, LIST3_TAB_TAG)) .setContent(new TabContentFactory() { public View createTabContent(String arg0) { return (LinearLayout) findViewById(R.id.delay_tab); } })); tabHost.addTab(tabHost.newTabSpec(LIST4_TAB_TAG). setIndicator(createTabView(this, LIST4_TAB_TAG)) .setContent(new TabContentFactory() { public View createTabContent(String arg0) { return (LinearLayout) findViewById(R.id.personal_tab); } })); tabHost.addTab(tabHost.newTabSpec(LIST5_TAB_TAG) .setIndicator(createTabView(this, LIST5_TAB_TAG)) .setContent(new TabContentFactory() { public View createTabContent(String arg0) { return (LinearLayout) findViewById(R.id.ticket_tab); } })); store = ClaimStore.getInstance(); Bundle extras = getIntent().getExtras(); int index = Integer.parseInt(extras.getString("index")); claim = store.getAll(this).get(index); fetcher = new ClaimFetcher(claim); fetcher.registerCallback(this); setupViewReferences(); setupViewHandlers(); if (!claim.getEditable()) markNotEditable(); } public View createTabView(final Context context, final String text) { View view = LayoutInflater.from(context) .inflate(R.layout.tabs_background, null); TextView tabsTextView = (TextView) view.findViewById(R.id.tabs_textview); tabsTextView.setText(text.toUpperCase()); // tabsImageView = (ImageView) view.findViewById(R.id.tabs_imageview); return view; } @Override protected void onPause() { super.onPause(); store.storeToFile(this); } // Views private Spinner ticketSpinner; private View submitButton; private View oysterLayout; private View tflLayout; private View railLayout; private EditText infoEdit; private TextView resultView; private Button journeyStartDate; private Spinner journeyStartStation; private Spinner journeyLineUsed; private Spinner journeyEndStation; private Spinner delayAtStation; private Spinner delayStation1; private Spinner delayStation2; private RadioButton delayAt; private RadioButton delayBetween; private Button delayWhen; private Button delayDuration; private Spinner personalTitle; private EditText personalSurname; private EditText personalName; private EditText personalLine1; private EditText personalLine2; private EditText personalCity; private EditText personalPostcode; private EditText personalPhone; private EditText personalEmail; private EditText personalPhotocard; private EditText ticketOysterNumber; private Spinner ticketOysterCardType; private Spinner ticketOysterTicketType; private Button ticketTflExpiry; private EditText ticketTflNumber; private EditText ticketTflIssuingStation; private EditText ticketTflRetainingStation; private Spinner ticketTflDuration; private Spinner ticketTflType; private EditText ticketRailClass; private Button ticketRailValidUntil; private EditText ticketRailNumber; private Spinner ticketRailCardType; private Spinner ticketRailDuration; private EditText ticketRailPurschase; private EditText ticketRailRetainedStation; private void setupViewReferences() { oysterLayout = findViewById(R.id.oyster_layout); tflLayout = findViewById(R.id.tfl_layout); railLayout = findViewById(R.id.rail_layout); submitButton = findViewById(R.id.submit_button); ticketSpinner = (Spinner) findViewById(R.id.ticket_type_spinner); infoEdit = (EditText) findViewById(R.id.claim_info); resultView = (TextView) findViewById(R.id.claim_result); journeyStartDate = (Button) findViewById(R.id.claim_journey_startdate); journeyStartStation = (Spinner) findViewById(R.id.claim_journey_startstation); journeyEndStation = (Spinner) findViewById(R.id.claim_journey_endstation); journeyLineUsed = (Spinner) findViewById(R.id.claim_journey_lineused); delayAtStation = (Spinner) findViewById(R.id.claim_delay_atstation); delayStation1 = (Spinner) findViewById(R.id.claim_delay_station1); delayStation2 = (Spinner) findViewById(R.id.claim_delay_station2); delayAt = (RadioButton) findViewById(R.id.claim_delay_at); delayBetween = (RadioButton) findViewById(R.id.claim_delay_between); delayWhen = (Button) findViewById(R.id.claim_delay_when); delayDuration = (Button) findViewById(R.id.claim_delay_duration); personalTitle = (Spinner) findViewById(R.id.claim_personal_title); personalSurname = (EditText) findViewById(R.id.claim_personal_surname); personalName = (EditText) findViewById(R.id.claim_personal_name); personalLine1 = (EditText) findViewById(R.id.claim_personal_line1); personalLine2 = (EditText) findViewById(R.id.claim_personal_line2); personalCity = (EditText) findViewById(R.id.claim_personal_city); personalPostcode = (EditText) findViewById(R.id.claim_personal_postcode); personalPhone = (EditText) findViewById(R.id.claim_personal_phone); personalEmail = (EditText) findViewById(R.id.claim_personal_email); personalPhotocard = (EditText) findViewById(R.id.claim_personal_photocard); ticketOysterNumber = (EditText) findViewById(R.id.claim_ticket_oyster_number); ticketOysterCardType = (Spinner) findViewById(R.id.claim_ticket_oyster_card_type); ticketOysterTicketType = (Spinner) findViewById(R.id.claim_ticket_oyster_ticket_type); ticketTflExpiry = (Button) findViewById(R.id.claim_ticket_tfl_expiry); ticketTflNumber = (EditText) findViewById(R.id.claim_ticket_tfl_number); ticketTflIssuingStation = (EditText) findViewById(R.id.claim_ticket_tfl_issuingstn); ticketTflRetainingStation = (EditText) findViewById(R.id.claim_ticket_tfl_retainedstn); ticketTflType = (Spinner) findViewById(R.id.claim_ticket_tfl_type); ticketTflDuration = (Spinner) findViewById(R.id.claim_ticket_tfl_duration); ticketRailClass = (EditText) findViewById(R.id.claim_ticket_rail_class); ticketRailValidUntil = (Button) findViewById(R.id.claim_ticket_rail_validuntil); ticketRailNumber = (EditText) findViewById(R.id.claim_ticket_rail_number); ticketRailCardType = (Spinner) findViewById(R.id.claim_ticket_rail_type); ticketRailDuration = (Spinner) findViewById(R.id.claim_ticket_rail_duration); ticketRailPurschase = (EditText) findViewById(R.id.claim_ticket_rail_purchase); ticketRailRetainedStation = (EditText) findViewById(R.id.claim_ticket_rail_retainedstation); } private void markNotEditable() { ticketSpinner.setEnabled(false); submitButton.setVisibility(View.GONE); journeyStartDate.setEnabled(false); journeyStartStation.setEnabled(false); journeyLineUsed.setEnabled(false); journeyEndStation.setEnabled(false); delayAtStation.setEnabled(false); delayStation1.setEnabled(false); delayStation2.setEnabled(false); delayAt.setEnabled(false); delayBetween.setEnabled(false); delayWhen.setEnabled(false); delayDuration.setEnabled(false); personalTitle.setEnabled(false); personalSurname.setEnabled(false); personalName.setEnabled(false); personalLine1.setEnabled(false); personalLine2.setEnabled(false); personalCity.setEnabled(false); personalPostcode.setEnabled(false); personalPhone.setEnabled(false); personalEmail.setEnabled(false); personalPhotocard.setEnabled(false); ticketOysterNumber.setEnabled(false); ticketOysterCardType.setEnabled(false); ticketOysterTicketType.setEnabled(false); ticketTflExpiry.setEnabled(false); ticketTflNumber.setEnabled(false); ticketTflIssuingStation.setEnabled(false); ticketTflRetainingStation.setEnabled(false); ticketTflDuration.setEnabled(false); ticketTflType.setEnabled(false); ticketRailClass.setEnabled(false); ticketRailValidUntil.setEnabled(false); ticketRailNumber.setEnabled(false); ticketRailCardType.setEnabled(false); ticketRailDuration.setEnabled(false); ticketRailPurschase.setEnabled(false); ticketRailRetainedStation.setEnabled(false); } private void setupViewHandlers() { submitButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { showDialog(MESSAGE_SENDWARNING); } }); int i = 0; for (i = 0; i < ticketSpinner.getAdapter().getCount(); i++) { if (ticketSpinner.getAdapter().getItem(i).equals(claim.ticket_type)) break; } if (i == ticketSpinner.getAdapter().getCount()) i = 0; // the default if the claim is new ticketSpinner.setSelection(i); ticketSpinner.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.ticket_type = (String) ticketSpinner.getItemAtPosition(position); oysterLayout.setVisibility(claim.getTicketOysterVisibility()); tflLayout.setVisibility(claim.getTicketTflVisibility()); railLayout.setVisibility(claim.getTicketRailVisibility()); } }); infoEdit.setText(claim.user_notes); infoEdit.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.user_notes = e.toString(); } }); resultView.setText(claim.getResult()); journeyStartDate.setText(dateFormat.format(claim.journey_started)); journeyStartDate.setOnClickListener(new OnClickListener() { public void onClick(View v) { showDialog(v.getId()); } }); final List<String> stations = StationDetails.FetchTubeStationsClaims(); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, stations); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); journeyStartStation.setAdapter(adapter); journeyStartStation.setSelection(stations.indexOf(claim.journey_startstation)); journeyStartStation.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.journey_startstation = stations.get(position); } }); journeyEndStation.setAdapter(adapter); journeyEndStation.setSelection(stations.indexOf(claim.journey_endstation)); journeyEndStation.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.journey_endstation = stations.get(position); } }); final List<String> lines = LinePresentation.getLinesStringListClaims(); ArrayAdapter<String> lines_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, lines); lines_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); journeyLineUsed.setAdapter(lines_adapter); journeyLineUsed.setSelection(lines.indexOf(claim.journey_lineused)); journeyLineUsed.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.journey_lineused = lines.get(position); } }); // ////////// delay tab ///////////////////// delayWhen.setText(timeFormat.format(claim.delay_when)); delayWhen.setOnClickListener(new OnClickListener() { public void onClick(View v) { showDialog(v.getId()); } }); delayDuration.setText(durationFormat.format(claim.delay_duration) + " minutes"); delayDuration.setOnClickListener(new OnClickListener() { public void onClick(View v) { showDialog(v.getId()); } }); updateJourneySpinners(); // I don't use a buttongroup, instead I crate and manage the group // manually final List<RadioButton> radioButtons = new ArrayList<RadioButton>(); radioButtons.add(delayAt); radioButtons.add(delayBetween); for (RadioButton button : radioButtons) { button.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) claim.setDelayAt(buttonView.getId() == delayAt.getId() && isChecked); updateJourneySpinners(); } }); } delayAtStation.setAdapter(adapter); delayAtStation.setSelection(stations.indexOf(claim.getDelayAtStation())); delayAtStation.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.setDelayAtstation(stations.get(position)); // delayStation1.setSelection(0); // delayStation2.setSelection(0); } }); delayStation1.setAdapter(adapter); delayStation1.setSelection(stations.indexOf(claim.getDelayStation1())); delayStation1.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.setDelayStation1(stations.get(position)); // delayAtStation.setSelection(0); // delayStation2.setSelection(0); } }); delayStation2.setAdapter(adapter); delayStation2.setSelection(stations.indexOf(claim.getDelayStation2())); delayStation2.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.setDelayStation2(stations.get(position)); // delayAtStation.setSelection(0); // delayStation1.setSelection(0); } }); // //////////personal tab ///////////////////// final String[] titles = getResources().getStringArray(R.array.claim_title_spinner); int j = 0; for (int ii = 0; ii < titles.length; ii++) { if (titles[ii].equals(claim.personal_title)) { j = ii; break; } } personalTitle.setSelection(j); personalTitle.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.personal_title = titles[position]; } }); personalSurname.setText(claim.personal_surname); personalSurname.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.personal_surname = e.toString(); } }); personalName.setText(claim.personal_name); personalName.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.personal_name = e.toString(); } }); personalLine1.setText(claim.personal_address1); personalLine1.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.personal_address1 = e.toString(); } }); personalLine2.setText(claim.personal_address2); personalLine2.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.personal_address2 = e.toString(); } }); personalCity.setText(claim.personal_city); personalCity.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.personal_city = e.toString(); } }); personalPostcode.setText(claim.personal_postcode); personalPostcode.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.personal_postcode = e.toString(); } }); personalPhone.setText(claim.personal_phone); personalPhone.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.personal_phone = e.toString(); } }); personalEmail.setText(claim.personal_email); personalEmail.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.personal_email = e.toString(); } }); personalPhotocard.setText(claim.personal_photocard); personalPhotocard.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.personal_photocard = e.toString(); } }); // ///////////oyster ticket tab/////////////////// ticketOysterNumber.setText(claim.ticket_oyster_number); ticketOysterNumber.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.ticket_oyster_number = e.toString(); } }); final String[] oyster_card_types = getResources().getStringArray(R.array.oyster_card_type_spinner); j = 0; for (int ii = 0; ii < oyster_card_types.length; ii++) { if (oyster_card_types[ii].equals(claim.ticket_oyster_type)) { j = ii; break; } } ticketOysterCardType.setSelection(j); ticketOysterCardType.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.ticket_oyster_type = oyster_card_types[position]; } }); final String[] oyster_ticket_types = getResources().getStringArray(R.array.oyster_ticket_type_spinner); j = 0; for (int ii = 0; ii < oyster_ticket_types.length; ii++) { if (oyster_ticket_types[ii].equals(claim.ticket_oyster_duration)) { j = ii; break; } } ticketOysterTicketType.setSelection(j); ticketOysterTicketType.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.ticket_oyster_duration = oyster_ticket_types[position]; } }); // ///////////tfl ticket tab/////////////////// ticketTflExpiry.setText(dateFormatSimple.format(claim.ticket_tfl_expiry)); ticketTflExpiry.setOnClickListener(new OnClickListener() { public void onClick(View v) { showDialog(v.getId()); } }); ticketTflNumber.setText(claim.ticket_tfl_number); ticketTflNumber.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.ticket_tfl_number = e.toString(); } }); ticketTflIssuingStation.setText(claim.ticket_tfl_issuing); ticketTflIssuingStation.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.ticket_tfl_issuing = e.toString(); } }); ticketTflRetainingStation.setText(claim.ticket_tfl_retainedstation); ticketTflRetainingStation.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.ticket_tfl_retainedstation = e.toString(); } }); final String[] tfl_duration_types = getResources().getStringArray(R.array.tfl_duration_spinner); j = 0; for (int ii = 0; ii < tfl_duration_types.length; ii++) { if (tfl_duration_types[ii].equals(claim.ticket_tfl_duration)) { j = ii; break; } } ticketTflDuration.setSelection(j); ticketTflDuration.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.ticket_tfl_duration = tfl_duration_types[position]; } }); j = 0; for (int ii = 0; ii < oyster_card_types.length; ii++) { if (oyster_card_types[ii].equals(claim.ticket_tfl_type)) { j = ii; break; } } ticketTflType.setSelection(j); ticketTflType.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.ticket_tfl_type = oyster_card_types[position]; } }); // ///////////rail ticket tab/////////////////// ticketRailValidUntil.setText(dateFormatSimple.format(claim.ticket_rail_expiry)); ticketRailValidUntil.setOnClickListener(new OnClickListener() { public void onClick(View v) { showDialog(v.getId()); } }); ticketRailClass.setText(claim.ticket_rail_class); ticketRailClass.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.ticket_rail_class = e.toString(); } }); ticketRailNumber.setText(claim.ticket_rail_number); ticketRailNumber.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.ticket_rail_number = e.toString(); } }); ticketRailPurschase.setText(claim.ticket_rail_purchasedplace); ticketRailPurschase.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.ticket_rail_purchasedplace = e.toString(); } }); ticketRailRetainedStation.setText(claim.ticket_rail_retainedstation); ticketRailRetainedStation.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable e) { claim.ticket_rail_retainedstation = e.toString(); } }); final String[] rail_duration_types = getResources().getStringArray(R.array.rail_duration_spinner); j = 0; for (int ii = 0; ii < rail_duration_types.length; ii++) { if (rail_duration_types[ii].equals(claim.ticket_rail_duration)) { j = ii; break; } } ticketRailDuration.setSelection(j); ticketRailDuration.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.ticket_rail_duration = rail_duration_types[position]; } }); j = 0; for (int ii = 0; ii < oyster_card_types.length; ii++) { if (oyster_card_types[ii].equals(claim.ticket_rail_type)) { j = ii; break; } } ticketRailCardType.setSelection(j); ticketRailCardType.setOnItemSelectedListener(new SimpleOnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) { claim.ticket_rail_type = oyster_card_types[position]; } }); } private void updateJourneySpinners() { if (claim.isDelayAtStation()) { delayAtStation.setEnabled(true); delayStation1.setEnabled(false); delayStation2.setEnabled(false); delayAt.setChecked(true); delayBetween.setChecked(false); } else { delayStation1.setEnabled(true); delayStation2.setEnabled(true); delayAtStation.setEnabled(false); delayAt.setChecked(false); delayBetween.setChecked(true); } } private Dialog wait_dialog; @Override protected Dialog onCreateDialog(int id) { if (journeyStartDate.getId() == id) { Date d = claim.journey_started; return new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { claim.journey_started = new Date(year - 1900, monthOfYear, dayOfMonth); journeyStartDate.setText(dateFormat.format(claim.journey_started)); } }, d.getYear() + 1900, d.getMonth(), d.getDate()); } else if (delayWhen.getId() == id) { Date d = claim.delay_when; return new TimePickerDialog(this, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int h, int m) { claim.delay_when = new Date(); claim.delay_when.setHours(h); claim.delay_when.setMinutes(m); delayWhen.setText(timeFormat.format(claim.delay_when)); } }, d.getHours(), d.getMinutes(), true); } else if (delayDuration.getId() == id) { final CharSequence[] items = { "15", "20", "25", "30", "40", "50", "59+" }; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Delay duration (minutes)"); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { claim.delay_duration = new Date(); claim.delay_duration.setHours(0); claim.delay_duration.setMinutes(Integer.parseInt(items[item].subSequence(0, 2).toString())); delayDuration.setText(durationFormat.format(claim.delay_duration) + " minutes"); } }); return builder.create(); } else if (ticketTflExpiry.getId() == id) { Date d = claim.ticket_tfl_expiry; return new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { claim.ticket_tfl_expiry = new Date(year - 1900, monthOfYear, dayOfMonth); ticketTflExpiry.setText(dateFormatSimple.format(claim.ticket_tfl_expiry)); } }, d.getYear() + 1900, d.getMonth(), d.getDate()); } else if (ticketRailValidUntil.getId() == id) { Date d = claim.ticket_rail_expiry; return new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { claim.ticket_rail_expiry = new Date(year - 1900, monthOfYear, dayOfMonth); ticketRailValidUntil.setText(dateFormatSimple.format(claim.ticket_rail_expiry)); } }, d.getYear() + 1900, d.getMonth(), d.getDate()); } else if (id == MESSAGE_WAIT) { wait_dialog = ProgressDialog.show(this, "Submitting claim", "Please wait...", true); return wait_dialog; } else if (id == MESSAGE_NOTICE) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(notice_msg).setTitle(notice_title).setCancelable(false) .setNegativeButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); if (claim.getSubmitted()) showDialog(MESSAGE_PREFILL); } }); return builder.create(); } else if (id==MESSAGE_PREFILL) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to use the personal and ticket details from this claim to prefill " + "future claims?") .setTitle("Store as Prefill") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { storeAsPrefill(); finish(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { claim.setPrefill(false); finish(); } }); return builder.create(); } else if (id==MESSAGE_SENDWARNING) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("I confirm that the information I have given is correct to the best of my knowledge. " + "I understand that if I give false information, future claims may be rejected and legal action " + "may be taken against me. I consent to London Underground checking the information that I " + "have given on this form.") .setTitle("Notice") .setCancelable(true) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); sendClaim(); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); return builder.create(); } else return null; } @Override protected void onPrepareDialog(final int id, final Dialog dialog) { if (id == MESSAGE_NOTICE) { // update to current time AlertDialog d = (AlertDialog) dialog; d.setTitle(notice_title); d.setMessage(notice_msg); } } protected void storeAsPrefill() { for (Claim c : store.getAll(this)) { c.setPrefill(false); //to avoid having two prefill claims } claim.setPrefill(true); } protected void sendClaim() { try { claim.isReady(); fetcher.update(); showDialog(MESSAGE_WAIT); } catch (InvalidPropertiesFormatException e) { showDialogMessage("Failed", e.getMessage()); } catch (Exception e) { showDialogMessage("Failed", "Error 100: Claim preparation error"); } } private String notice_title; private String notice_msg; private void showDialogMessage(String s, String ss) { notice_title = s; notice_msg = ss; showDialog(MESSAGE_NOTICE); } @Override public void update() { wait_dialog.dismiss(); if (claim.getSubmitted()) { showDialogMessage("Success!", "Your claim was sent successfully. " + "Your reference number is "+claim.getReferenceNo()+". "+ "It normally takes 21 days to process a refund. If you haven�t heard from TfL after 21 days, " + "contact Oyster Customer Service Centre"); } else { showDialogMessage("Failed", "Error 101: " + fetcher.getErrors()); } } }