RouteActivity.java :  » Schedule » nextvta » org » jtb » nextvta » Android Open Source

Android Open Source » Schedule » nextvta 
nextvta » org » jtb » nextvta » RouteActivity.java
package org.jtb.nextvta;

import java.util.Calendar;
import java.util.List;

import org.json.JSONException;
import org.jtb.nextvta.Direction.DisplayDirection;
import org.jtb.nextvta.Period.DisplayPeriod;
import org.jtb.nextvta.Route.DisplayRoute;
import org.jtb.nextvta.donate.R;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

public class RouteActivity extends Activity {
  private Route mRoute;
  private List<Direction> mDirections;
  private List<Period> mPeriods;
  private List<Timepoint> mTimepoints;
  private Integer mTrip = 0;
  private Integer mMaxTrip = 0;
  private Spinner mDirectionSpinner;
  private Spinner mPeriodSpinner;
  private Tdl mTdl;
  private TdlManager mTdlManager;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.route_timepoints);

    mRoute = savedInstanceState != null ? (Route) savedInstanceState
        .get("org.jtb.nextvta.route") : null;
    if (mRoute == null) {
      Bundle extras = getIntent().getExtras();
      mRoute = extras != null ? (Route) extras
          .get("org.jtb.nextvta.route") : null;
    }
    if (mRoute == null) {
      String routeString = savedInstanceState != null ? (String) savedInstanceState
          .get("org.jtb.nextvta.route.string") : null;
      if (routeString == null) {
        Bundle extras = getIntent().getExtras();
        routeString = extras != null ? (String) extras
            .get("org.jtb.nextvta.route.string") : null;
      }
      if (routeString != null) {
        try {
          mRoute = new Route(routeString);
        } catch (JSONException e) {
          Log.e("nextvta", "could not process route string: "
              + routeString);
          Toast.makeText(this,
              "Could not process route string: " + routeString,
              Toast.LENGTH_LONG).show();
          finish();
        }
      }
      if (mRoute == null) {
        Log.e("nextvta", "no route found");
        Toast.makeText(this,
            "No route found",
            Toast.LENGTH_LONG).show();
        finish();
      }
    }

    mTdlManager = TdlManager.getInstance(getResources().getAssets());
    mTdl = new Tdl(mRoute);

    // direction, period spinners

    mDirections = mTdlManager.fetchDirections(mRoute);
    mTdl.setDirection(mDirections.get(0));
    mDirectionSpinner = (Spinner) findViewById(R.id.direction_spinner);
    ArrayAdapter<DisplayDirection> daa = new ArrayAdapter<DisplayDirection>(
        this, android.R.layout.simple_spinner_item,
        Direction.getDisplayDirections(this, mDirections));
    daa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mDirectionSpinner.setAdapter(daa);
    mDirectionSpinner.setSelection(0);
    mDirectionSpinner.setSelected(false);
    mDirectionSpinner
        .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
          public void onItemSelected(AdapterView parent, View v,
              int position, long id) {
            DisplayDirection dd = (DisplayDirection) parent
                .getSelectedItem();
            if (mTdl.getDirection() != dd.getDirection()) {
              mTdl.setDirection(dd.getDirection());
              load(true);
              layout();
            }
          }

          public void onNothingSelected(AdapterView parent) {
          }
        });

    mPeriodSpinner = (Spinner) findViewById(R.id.period_spinner);

    load(true);
    layout();

    // TODO: localize
    DisplayRoute dd = mTdl.getRoute().getDisplayRoute(this);
    setTitle("NextVTA - " + dd + ": " + dd.getDescription());
  }

  private class CurrentClickListener implements View.OnClickListener {
    private Timepoint nextTimepoint;

    public CurrentClickListener(Timepoint nextTimepoint) {
      this.nextTimepoint = nextTimepoint;
    }

    public void onClick(View v) {
      mTrip = nextTimepoint.getTrip();
      layout();
    }
  }

  private void layout() {
    TableLayout layout = (TableLayout) findViewById(R.id.route_table);
    layout.setColumnStretchable(0, true);

    layout.removeAllViews();
    for (final Timepoint tp : mTimepoints) {
      if (tp.getTrip() != mTrip) {
        continue;
      }
      View.OnClickListener nextClick = new View.OnClickListener() {
        public void onClick(View v) {
          if (mTrip + 1 <= mMaxTrip) {
            mTrip++;
            layout();
          }
        }
      };
      View.OnClickListener previousClick = new View.OnClickListener() {
        public void onClick(View v) {
          if (mTrip - 1 >= 0) {
            mTrip--;
            layout();
          }
        }
      };

      TableRow row = new TableRow(this);

      TextView textView = new TextView(this);
      textView.setText(tp.getDescription());
      textView.setGravity(Gravity.LEFT);
      textView.setTextSize(16);

      TableRow.LayoutParams rowParams = new TableRow.LayoutParams();
      rowParams.height = 56;
      rowParams.width = TableRow.LayoutParams.FILL_PARENT;
      rowParams.weight = 1;
      rowParams.column = 0;

      row.addView(textView, rowParams);

      textView = new TextView(this);
      textView.setText(tp.getTime().toString());
      textView.setGravity(Gravity.RIGHT);
      textView.setTextSize(16);
      textView.setPadding(2, 0, 0, 0);

      rowParams = new TableRow.LayoutParams();
      rowParams.height = TableRow.LayoutParams.WRAP_CONTENT;
      rowParams.width = TableRow.LayoutParams.FILL_PARENT;
      rowParams.weight = 1;
      rowParams.column = 1;

      row.addView(textView, rowParams);

      ImageButton b = new ImageButton(this);
      b.setImageResource(R.drawable.backward_24x24);
      b.setOnClickListener(previousClick);
      if (mTrip == 0) {
        b.setEnabled(false);
      }

      rowParams = new TableRow.LayoutParams();
      rowParams.height = TableRow.LayoutParams.WRAP_CONTENT;
      rowParams.width = TableRow.LayoutParams.FILL_PARENT;
      rowParams.weight = 1;
      rowParams.column = 2;

      row.addView(b, rowParams);

      b = new ImageButton(this);
      b.setImageResource(R.drawable.clock_24x24);
      Timepoint nextTp = TdlManager.nextTimepoint(mTimepoints, tp);
      if (nextTp != null) {
        View.OnClickListener currentClick = new CurrentClickListener(
            nextTp);
        b.setOnClickListener(currentClick);
      } else {
        b.setEnabled(false);
      }

      rowParams = new TableRow.LayoutParams();
      rowParams.height = TableRow.LayoutParams.WRAP_CONTENT;
      rowParams.width = TableRow.LayoutParams.FILL_PARENT;
      rowParams.weight = 1;
      rowParams.column = 3;

      row.addView(b, rowParams);

      b = new ImageButton(this);
      b.setImageResource(R.drawable.forward_24x24);
      b.setOnClickListener(nextClick);
      if (mTrip == mMaxTrip) {
        b.setEnabled(false);
      }

      rowParams = new TableRow.LayoutParams();
      rowParams.height = TableRow.LayoutParams.WRAP_CONTENT;
      rowParams.width = TableRow.LayoutParams.FILL_PARENT;
      rowParams.weight = 1;
      rowParams.column = 4;

      row.addView(b, rowParams);
      layout.addView(row);

    }
  }

  private void load(boolean directionChanged) {
    if (directionChanged) {
      updatePeriods();
    }

    mTimepoints = mTdlManager.fetchTimepoints(mTdl);
    if (mTimepoints.size() == 0) {
      return;
    }

    mMaxTrip = TdlManager.getMaxTrip(mTimepoints);
    Timepoint nextTp = TdlManager.nextTimepoint(mTimepoints,
        mTimepoints.get(0));
    if (nextTp != null) {
      mTrip = nextTp.getTrip();
    } else {
      mTrip = mMaxTrip;
    }
  }

  private void updatePeriods() {
    mPeriods = mTdlManager.fetchPeriods(mRoute,
        ((DisplayDirection) mDirectionSpinner.getSelectedItem())
            .getDirection());
    mTdl.setPeriod(getPeriod(mPeriods));
    ArrayAdapter<DisplayPeriod> paa = new ArrayAdapter<DisplayPeriod>(this,
        android.R.layout.simple_spinner_item, Period.getDisplayPeriods(
            this, mPeriods));
    paa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    int j = mPeriods.indexOf(mTdl.getPeriod());
    mPeriodSpinner.setAdapter(paa);
    mPeriodSpinner.setSelection(j);
    mPeriodSpinner.setSelected(false);
    mPeriodSpinner
        .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
          public void onItemSelected(AdapterView parent, View v,
              int position, long id) {
            DisplayPeriod dp = (DisplayPeriod) parent
                .getSelectedItem();
            if (mTdl.getPeriod() != dp.getPeriod()) {
              mTdl.setPeriod(dp.getPeriod());
              load(false);
              layout();
            }
          }

          public void onNothingSelected(AdapterView parent) {
          }
        });

  }

  @Override
  protected Dialog onCreateDialog(int id) {
    switch (id) {
    }
    return null;
  }

  private Period getPeriod(List<Period> periods) {
    Calendar cal = Calendar.getInstance();
    int dow = cal.get(Calendar.DAY_OF_WEEK);
    switch (dow) {
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
      if (periods.contains(Period.WK)) {
        return Period.WK;
      }

    case 1:
      if (periods.contains(Period.SU)) {
        return Period.SU;
      }
    case 7:
      if (periods.contains(Period.SA)) {
        return Period.SA;
      }
    }

    return periods.get(0);
  }

  public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.route_timepoints_menu, menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.view_route_item:
      Intent i = new Intent(this, RouteViewActivity.class);
      i.putExtra("org.jtb.nextvta.route", mRoute);
      startActivity(i);
      return true;
    }

    return false;
  }

}
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.