package com.njtransit; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.njtransit.domain.Stop; import com.njtransit.domain.TrainStatus; import com.njtransit.rail.R; import com.njtransit.utils.TimeUtil; public class StopTimeRow extends LinearLayout { private TextView time; private TextView duration; private TextView away; private TextView timeDescriptor; private int lastAway = Integer.MAX_VALUE; private Stop stop; public StopTimeRow(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onFinishInflate() { time = (TextView) findViewById(R.id.time); duration = (TextView) findViewById(R.id.duration); away = (TextView) findViewById(R.id.away); timeDescriptor = (TextView)findViewById(R.id.time_descriptor); } public StopTimeRow setStop(Stop stop) { this.stop = stop; time.setText(format(stop.getDepart(), stop.getArrive())); return this; } public void populateDuration() { duration.setText(duration()); } public String getAway(ListView parent) { long diff = stop.getDepart().getTimeInMillis() - System.currentTimeMillis(); int mins = (int) diff / 60000; String newVal = null; if (lastAway != mins && lastAway > -60) { lastAway = mins; if (mins > 0 && mins < 61) { if (mins <= 61) { away.setTextColor(getResources() .getColor(R.color.red_light)); } newVal = TimeUtil.getUnitTime(diff, getContext()); } else { newVal = ""; } } return newVal; } public void setAway(String away) { this.away.setText(away); } public void setTrainStatus(TrainStatus status) { if(status.getTrack()!=null) { timeDescriptor.setVisibility(View.VISIBLE); timeDescriptor.setText(status.getTrack()); } else { timeDescriptor.setVisibility(View.GONE); } } private static final String DURATION_ONLY = "%s mins"; private static final String DURATION_AND_DEPARTURE = "%s mins"; public Long getDepartureInSeconds() { return System.currentTimeMillis() - stop.getDepart().getTimeInMillis() / 1000; } public String duration() { final long diff = stop.getArrive().getTimeInMillis() - stop.getDepart().getTimeInMillis(); long mins = diff / 60000; Long departureInSeconds = getDepartureInSeconds() / 60; if (departureInSeconds < 0 || departureInSeconds > 60) { departureInSeconds = null; } if (departureInSeconds == null) { return String.format(DURATION_ONLY, mins); } else { return String.format(DURATION_AND_DEPARTURE, mins); } } private String format(Calendar departing, Calendar arriving) { DateFormat f = new SimpleDateFormat("hh:mm aa"); String depart = f.format(departing.getTime()); String arrive = f.format(arriving.getTime()); return String.format("%s - %s %s", depart, arrive,stop.getTripId()).toLowerCase(); } public Stop getStop() { return stop; } }