SearchTripView.java :  » App » hello-road » org » android » Android Open Source

Android Open Source » App » hello road 
hello road » org » android » SearchTripView.java
package org.android;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;

import org.helloroad.Trip;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class SearchTripView extends Activity {

  private AutoCompleteTextView departure;
  private AutoCompleteTextView arrival;
  private TextView dateTxv;
  private TextView dayTxv;
  private TextView timeTxv;
  private Button searchBtn;
  private Button dayBtn;
  private Button dateBtn;
  private Button timeBtn;
  private ArrayList<String> dayList;
  private ArrayList<String> locationsList;
  private HashMap<String, Boolean> selectedDayList;

  private List<Trip> searchResults;

  private static final int ACTIVITY_CREATE = 0;
  private static final int DATE_DIALOG_ID = 1;
  private static final int DAY_DIALOG_ID = 2;
  private static final int TIME_DIALOG_ID = 3;
  private static final int RESULTS_DIALOG_ID = 4;

  private int mYear;
  private int mMonth;
  private int mDay;

  private int mHour;
  private int mMinute;

  private int userId;

  private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
      mYear = year;
      mMonth = monthOfYear;
      mDay = dayOfMonth;
      updateDateDisplay();
    }
  };

  private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
      mHour = hourOfDay;
      mMinute = minute;
      updateTimeDisplay();
    }
  };

  public int getUserId() {
    return userId;
  }

  public void setUserId(int userId) {
    this.userId = userId;
  }

  @SuppressWarnings("unchecked")
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.trip_search);

    Bundle extras = getIntent().getExtras();
    userId = extras.getInt("userId");

    departure = (AutoCompleteTextView) findViewById(R.id.departureSearch);
    arrival = (AutoCompleteTextView) findViewById(R.id.arrivalSearch);
    searchBtn = (Button) findViewById(R.id.tripSearch);
    dateTxv = (TextView) findViewById(R.id.dateDisplay);
    dayTxv = (TextView) findViewById(R.id.dayDisplay);
    timeTxv = (TextView) findViewById(R.id.timeDisplay);
    dayBtn = (Button) findViewById(R.id.dayChooser);
    dateBtn = (Button) findViewById(R.id.dateChooser);
    timeBtn = (Button) findViewById(R.id.timeChooser);

    locationsList = WSCommunicator.doGetLocations();
    ArrayAdapter adapter = new ArrayAdapter(this,
        android.R.layout.simple_dropdown_item_1line, locationsList
            .toArray());
    departure.setAdapter(adapter);
    arrival.setAdapter(adapter);

    selectedDayList = new HashMap<String, Boolean>();
    selectedDayList.put("monday", false);
    selectedDayList.put("tuesday", false);
    selectedDayList.put("wednesday", false);
    selectedDayList.put("thursday", false);
    selectedDayList.put("friday", false);
    selectedDayList.put("saturday", false);
    selectedDayList.put("sunday", false);

    dayList = new ArrayList<String>();
    dayList.add("monday");
    dayList.add("tuesday");
    dayList.add("wednesday");
    dayList.add("thursday");
    dayList.add("friday");
    dayList.add("saturday");
    dayList.add("sunday");

    // get the current date
    final Calendar c = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);
    mHour = c.get(Calendar.HOUR_OF_DAY);
    mMinute = c.get(Calendar.MINUTE);

    dateBtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        showDialog(DATE_DIALOG_ID);
      }
    });
    dayBtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        showDialog(DAY_DIALOG_ID);
      }
    });
    timeBtn.setOnClickListener(new View.OnClickListener() {
      
      @Override
      public void onClick(View v) {
        showDialog(TIME_DIALOG_ID);
      }
    });
    searchBtn.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
        String from = departure.getText().toString();
        String to = arrival.getText().toString();

        if (from.equals("")) {
          Toast.makeText(getBaseContext(), "Give the departure",
              Toast.LENGTH_SHORT).show();
        } else if (to.equals("")) {
          Toast.makeText(getBaseContext(), "Give the destination",
              Toast.LENGTH_SHORT).show();
        } else {
          String time = timeTxv.getText().toString();
          if (dateTxv.getVisibility() == TextView.VISIBLE)
            searchResults = WSCommunicator.search(from, to, dateTxv
                .getText().toString(), time);
          else
            searchResults = WSCommunicator.searchByDays(from, to,
                selectedDayList, time);
          if (searchResults.size() != 0)
            showDialog(RESULTS_DIALOG_ID);
        }
      }
    });
  }

  protected void updateDateDisplay() {
    for (String day : selectedDayList.keySet()) {
      selectedDayList.put(day, false);
    }
    dateTxv.setText(new StringBuilder().append(mMonth + 1).append("-")
        .append(
        mDay).append("-").append(mYear).append(" "));
    dayTxv.setText(null);
    dayTxv.setVisibility(TextView.INVISIBLE);
    dateTxv.setVisibility(TextView.VISIBLE);
  }

  protected void updateTimeDisplay() {
    timeTxv.setText(new StringBuilder().append(mHour).append(":").append(
        mMinute));
  }

  @Override
  protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
      return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
          mDay);
    case DAY_DIALOG_ID:
      Dialog dayChooserDialog = createDayDialog();
      return dayChooserDialog;
    case TIME_DIALOG_ID:
      Dialog timeChooserDialog = new TimePickerDialog(this,
          mTimeSetListener, mHour, mMinute, true);
      return timeChooserDialog;
    case RESULTS_DIALOG_ID:
      Dialog resultsDialog = createResultsDialog();
      return resultsDialog;
    }
    return null;
  }

  protected void goToTripList() {
    Intent i = new Intent(this, TripListView.class);
    startActivityForResult(i, ACTIVITY_CREATE);
  }

  protected Dialog createDayDialog() {
    Dialog dayChooserDialog = new Dialog(this);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, dayList);
    ListView dayListView = new ListView(this);
    dayListView.setAdapter(adapter);
    OnItemClickListener listener = new OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        String day = ((TextView) view).getText().toString();
        if (selectedDayList.get(day) == false)
          selectedDayList.put(day, true);
        else
          selectedDayList.put(day, false);
        updateDayDisplay();
      }
    };
    dayListView.setOnItemClickListener(listener);
    dayChooserDialog.setContentView(dayListView);
    dayChooserDialog.setTitle("Day Frequency");
    return dayChooserDialog;
  }

  private Dialog createResultsDialog() {
    Dialog resultsDialog = new Dialog(this);
    ArrayAdapter<Trip> adapter = new ArrayAdapter<Trip>(this,
        android.R.layout.simple_list_item_1, searchResults);
    ListView searchResultsListView = new ListView(this);
    searchResultsListView.setAdapter(adapter);
    OnItemClickListener listener = new OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        Trip tripDetails = (Trip) parent.getItemAtPosition(position);
        goToTripInfo(tripDetails);
      }
    };
    searchResultsListView.setOnItemClickListener(listener);
    resultsDialog.setContentView(searchResultsListView);
    if (adapter.getCount() == 0 || adapter.getCount() == 1)
      resultsDialog.setTitle(String.valueOf(adapter.getCount())
          + " result");
    else
      resultsDialog.setTitle(String.valueOf(adapter.getCount())
          + " results");
    return resultsDialog;
  }

  protected void goToTripInfo(Trip tripDetails) {
    Intent i = new Intent(this, TripInfoView.class);
    i.putExtra("tripDetails", tripDetails);
    startActivityForResult(i, ACTIVITY_CREATE);
  }

  protected void updateDayDisplay() {
    StringBuilder str = new StringBuilder();
    for (String day : selectedDayList.keySet()) {
      if (selectedDayList.get(day) == true)
        str.append(day + ", ");
    }
    dayTxv.setText(str);
    dayTxv.setVisibility(TextView.VISIBLE);
    dateTxv.setText(null);
    dateTxv.setVisibility(TextView.INVISIBLE);
  }

  private void goToTrips() {
    Intent i = new Intent(this, TripListView.class);
    i.putExtra("userId", userId);
    startActivityForResult(i, ACTIVITY_CREATE);

  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.