More routing fixes (SFO->Millbrae, weekdays)

This commit is contained in:
dkeen@dkeen-laptop 2012-04-30 14:16:38 -07:00
parent e7ec1f5978
commit 311adc9efc
2 changed files with 41 additions and 4 deletions

View File

@ -2,6 +2,8 @@ package com.dougkeen.bart;
import java.util.List;
import org.apache.commons.lang3.math.NumberUtils;
import android.app.ListActivity;
import android.content.ContentValues;
import android.content.Context;
@ -170,6 +172,8 @@ public class ViewDeparturesActivity extends ListActivity {
}
}
private boolean mIgnoreDepartureDirection = false;
private void fetchLatestDepartures() {
if (!hasWindowFocus())
return;
@ -180,7 +184,8 @@ public class ViewDeparturesActivity extends ListActivity {
return;
}
mGetDeparturesTask = new GetRealTimeDeparturesTask() {
mGetDeparturesTask = new GetRealTimeDeparturesTask(
mIgnoreDepartureDirection) {
@Override
public void onResult(RealTimeDepartures result) {
mDepartureFetchIsPending = false;
@ -249,6 +254,13 @@ public class ViewDeparturesActivity extends ListActivity {
if (result.getDepartures().isEmpty()) {
result.includeDoubleTransferRoutes();
}
if (result.getDepartures().isEmpty() && !mIgnoreDepartureDirection) {
// Let's try again, ignoring direction (this sometimes comes up when
// you travel between Millbrae and SFO)
mIgnoreDepartureDirection = true;
scheduleDepartureFetch(50);
return;
}
if (result.getDepartures().isEmpty()) {
final TextView textView = (TextView) findViewById(android.R.id.empty);
textView.setText(R.string.no_data_message);
@ -359,6 +371,23 @@ public class ViewDeparturesActivity extends ListActivity {
int localAverageLength = mLatestScheduleInfo.getAverageTripLength();
int departuresCount = mDeparturesAdapter.getCount();
// Let's get smallest interval between departures
int smallestDepartureInterval = 0;
long previousDepartureTime = 0;
for (int departureIndex = 0; departureIndex < departuresCount; departureIndex++) {
Departure departure = mDeparturesAdapter.getItem(departureIndex);
if (previousDepartureTime == 0) {
previousDepartureTime = departure.getMeanEstimate();
} else if (smallestDepartureInterval == 0) {
smallestDepartureInterval = (int) (departure.getMeanEstimate() - previousDepartureTime);
} else {
smallestDepartureInterval = Math
.min(smallestDepartureInterval,
(int) (departure.getMeanEstimate() - previousDepartureTime));
}
}
int lastSearchIndex = 0;
int tripCount = mLatestScheduleInfo.getTrips().size();
boolean departureUpdated = false;
@ -377,9 +406,10 @@ public class ViewDeparturesActivity extends ListActivity {
- departure.getMeanEstimate());
final long millisUntilTripDeparture = trip.getDepartureTime()
- System.currentTimeMillis();
final int equalityTolerance = (departure.getOrigin() != null) ? Math
final int equalityTolerance = (departure.getOrigin() != null) ? NumberUtils
.max(departure.getOrigin().departureEqualityTolerance,
ScheduleItem.SCHEDULE_ITEM_DEPARTURE_EQUALS_TOLERANCE)
ScheduleItem.SCHEDULE_ITEM_DEPARTURE_EQUALS_TOLERANCE,
smallestDepartureInterval)
: ScheduleItem.SCHEDULE_ITEM_DEPARTURE_EQUALS_TOLERANCE;
if (departure.getOrigin() != null
&& departure.getOrigin().longStationLinger

View File

@ -35,6 +35,13 @@ public abstract class GetRealTimeDeparturesTask extends
private List<Route> mRoutes;
private final boolean ignoreDirection;
public GetRealTimeDeparturesTask(boolean ignoreDirection) {
super();
this.ignoreDirection = ignoreDirection;
}
@Override
protected RealTimeDepartures doInBackground(StationPair... paramsArray) {
// Always expect one param
@ -60,7 +67,7 @@ public abstract class GetRealTimeDeparturesTask extends
String xml = null;
try {
String url;
if (params.getOrigin().endOfLine) {
if (ignoreDirection || params.getOrigin().endOfLine) {
url = String.format(ETD_URL_NO_DIRECTION,
params.getOrigin().abbreviation);
} else {