SkyTrainTab.java :  » App » vanbus » org » niclab » vanbus » activity » Android Open Source

Android Open Source » App » vanbus 
vanbus » org » niclab » vanbus » activity » SkyTrainTab.java
/*******************************************************************************
 * Copyright (c) 2010 liw.
 * All rights reserved. 
 * 
 * This file is part of VanBus.
 * 
 *     VanBus is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 * 
 *     VanBus is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 * 
 *     You should have received a copy of the GNU General Public License
 *     along with VanBus.  If not, see <http://www.gnu.org/licenses/>.
 * Contributors:
 *     liw - initial API and implementation
 ******************************************************************************/
package org.niclab.vanbus.activity;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.niclab.vanbus.R;
import org.niclab.vanbus.model.SkyTrainLine;
import org.niclab.vanbus.model.SkyTrainLine.SkyTrainRoute;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.app.TabActivity;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class SkyTrainTab {
  private static final String LOG_TAG="SkyTrainTab";
  
  private TabActivity tabActivity;
  private Context context;
  private TextView dayText;
  private TableLayout table;
  private List<SkyTrainLine> skyTrainLines;


  private String selectedDay;
  public SkyTrainTab(TabActivity tabActivity){
    this.tabActivity = tabActivity;
    this.context = tabActivity.getApplicationContext();
    TabHost tabHost = tabActivity.getTabHost();
    TabHost.TabSpec spec = tabHost.newTabSpec(tabActivity.getString(R.string.skytrain_tab_title)).setIndicator(tabActivity.getString(R.string.skytrain_tab_title)).setContent(R.id.skytrain_tab);
    tabHost.addTab(spec);
    

    
  }
  
  private void initialzeDayButtons(){
    Button buttonBack = (Button) tabActivity.findViewById(R.id.skytrain_day_button_backward);
    dayText = (TextView) tabActivity.findViewById(R.id.skytrain_day_text);
    buttonBack.setOnClickListener(new OnClickListener(){

      @Override
      public void onClick(View arg0) {
        selectedDay = SkyTrainLine.SkyTrainRoute.prevDay(selectedDay);
        dayText.setText(selectedDay);
        repaint();

        
      }
      
    });
    
    Button buttonForward = (Button) tabActivity.findViewById(R.id.skytrain_day_button_forward);
    
    buttonForward.setOnClickListener(new OnClickListener(){

      @Override
      public void onClick(View arg0) {
        selectedDay = SkyTrainLine.SkyTrainRoute.nextDay(selectedDay);
        dayText.setText(selectedDay);
        repaint();

        
      }
      
    });
    
  }
  
  

  public void repaint(){
    int index=0;
    for(SkyTrainLine trainLine:skyTrainLines){
      index++;
      for(SkyTrainRoute route : trainLine.getRoutes()){
        View view =table.getChildAt(index++);
        TextView first = (TextView) view.findViewById(R.id.skytrain_route_time_first);
        first.setText(route.getFirstShiftTime(selectedDay));
        
        TextView last = (TextView) view.findViewById(R.id.skytrain_route_time_last);
        last.setText(route.getLastShiftTime(selectedDay));
      
      }
      
      
    }
    
  }
  
  public void initScheduleTable(ViewGroup rootView){
    Log.d(LOG_TAG, "initializing the SkyTrain schedule table");

    try {
      skyTrainLines = readSkyTrainXML();
      
      int i=0;
      LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      for(SkyTrainLine trainLine:skyTrainLines){
        
      
        
        View lineRow= inflator.inflate(R.layout.skytrain_line, null);
        TextView title = (TextView) lineRow.findViewById(R.id.skytrain_line_name);      
        title.setText(trainLine.getName());

        rootView.addView(lineRow, i++);

        
        for(SkyTrainRoute route : trainLine.getRoutes()){
          
          
          
          View routeView = rootView.inflate(context, R.layout.skytrain_route,null);
          
          TextView  routeName= (TextView) routeView.findViewById(R.id.skytrain_route_name);
          routeName.setText(route.getStart()+" -> "+route.getEnd());
          
          TextView routeFirstTime = (TextView) routeView.findViewById(R.id.skytrain_route_time_first);
          routeFirstTime.setText(route.getFirstShiftTime(selectedDay));

          
          TextView routeLastTime = (TextView) routeView.findViewById(R.id.skytrain_route_time_last);
          routeLastTime.setText(route.getLastShiftTime(selectedDay));
          
          rootView.addView(routeView, i++);
  
        
  

        }
      
      }
    } catch (XmlPullParserException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  
    
  }
  
  public void onCreate(){
    selectedDay = SkyTrainLine.SkyTrainRoute.curDay();
    table= (TableLayout) tabActivity.findViewById(R.id.skytrain_schedule_table);
    initialzeDayButtons();
    initScheduleTable(table);
  }
  
  
  
  private List<SkyTrainLine> readSkyTrainXML() throws XmlPullParserException, IOException{
    XmlResourceParser xmlParser = tabActivity.getResources().getXml(R.xml.skytrain);
    List<SkyTrainLine> skyTrains = new ArrayList<SkyTrainLine>();
    
    int eType= xmlParser.getEventType();
    

    SkyTrainLine skyTrainLine = null;
    SkyTrainRoute route = null;

    while(eType != XmlPullParser.END_DOCUMENT){
      
      
      switch(eType){
      case XmlPullParser.START_TAG:
        //Log.v(LOG_TAG,"start tag name:" + xmlParser.getName());
        String tagName = xmlParser.getName();
        if(tagName.equals("trainline")){
        
          skyTrainLine = new SkyTrainLine(xmlParser.getAttributeValue(null, "name"));
          skyTrains.add(skyTrainLine);
        }
        
        if(tagName.equals("route")){
          route = new SkyTrainRoute();
          String startPlace = xmlParser.getAttributeValue(null, "start");
          String endPlace = xmlParser.getAttributeValue(null, "end");
          
          route.setStart(startPlace);
          route.setEnd(endPlace);
          skyTrainLine.addSkyTrainRoute(route);
          
          
        }

        
        if(tagName.equals("time")){
          
          String day = xmlParser.getAttributeValue(null, "day");
              
          String first = xmlParser.getAttributeValue(null, "first");
          String last = xmlParser.getAttributeValue(null, "last");
          
          String[] times = {first, last};
          
          route.addTime(day, times);
          
        }
        
        
        break;
        
        
      case XmlPullParser.END_TAG:
        //Log.v(LOG_TAG, "closing tag name:" + xmlParser.getName());
        
        break;
      
      
      
      }
      
      eType = xmlParser.next();
    }
    return skyTrains;
    
  }
  
  
  

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