package edu.mit.mitmobile2.objs; import java.util.ArrayList; import java.util.List; import android.os.Parcel; import android.os.Parcelable; public class RouteItem implements Parcelable { public RouteItem () { stops = new ArrayList<Stops>(); vehicleLocations = new ArrayList<Vehicle>(); } public String route_id; public String title; public int interval; public boolean isSafeRide; public boolean isRunning; public boolean gpsActive; public List<Vehicle> vehicleLocations; public String summary; public List<Stops> stops; public static class Vehicle implements Parcelable { //public String lat; //public String lon; public double lat; public double lon; public int heading; @Override public void writeToParcel(Parcel dest, int flags) { dest.writeDouble(lat); dest.writeDouble(lon); dest.writeInt(heading); } private void readFromParcel(Parcel in) { lat = in.readDouble(); lon = in.readDouble(); heading = in.readInt(); } public static final Parcelable.Creator<Vehicle> CREATOR = new Parcelable.Creator<Vehicle>() { @Override public Vehicle createFromParcel(Parcel source) { Vehicle vehicle = new Vehicle(); vehicle.readFromParcel(source); return vehicle; } @Override public Vehicle[] newArray(int size) { return new Vehicle[size]; } }; @Override public int describeContents() { return 0; } } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(route_id); dest.writeString(title); dest.writeInt(interval); writeBool(dest, isSafeRide); writeBool(dest, isRunning); writeBool(dest, gpsActive); dest.writeList(vehicleLocations); dest.writeString(summary); dest.writeList(stops); } @SuppressWarnings("unchecked") private void readFromParcel(Parcel in) { route_id = in.readString(); title = in.readString(); interval = in.readInt(); isSafeRide = readBool(in); isRunning = readBool(in); gpsActive = readBool(in); vehicleLocations = in.readArrayList(RouteItem.class.getClassLoader()); summary = in.readString(); stops = in.readArrayList(Stops.class.getClassLoader()); } public static final Parcelable.Creator<RouteItem> CREATOR = new Parcelable.Creator<RouteItem>() { @Override public RouteItem createFromParcel(Parcel source) { RouteItem routeItem = new RouteItem(); routeItem.readFromParcel(source); return routeItem; } @Override public RouteItem[] newArray(int size) { return new RouteItem[size]; } }; public static class Loc implements Parcelable { public float lat; public float lon; public static final Parcelable.Creator<Loc> CREATOR = new Parcelable.Creator<Loc>() { @Override public Loc createFromParcel(Parcel source) { Loc loc = new Loc(); loc.lat = source.readFloat(); loc.lon = source.readFloat(); return loc; } @Override public Loc[] newArray(int size) { return new Loc[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeFloat(lat); dest.writeFloat(lon); } } public static class Stops implements Parcelable { public Stops () { path = new ArrayList<Loc>(); predictions = new ArrayList<Integer>(); } public Stops(Parcel in) { readFromParcel(in); } public boolean alertSet = false; public String route_id; // needed if not enclosed by RouteItem public String id; public String title; public String lat; public String lon; public long next; // next arrival unixtime public long now; // reference time for predictions public ArrayList<Integer> predictions; public String direction; public ArrayList<Loc> path; public boolean upcoming = false; public boolean gps; public static final Parcelable.Creator<Stops> CREATOR = new Parcelable.Creator<Stops>() { @Override public Stops createFromParcel(Parcel source) { return new Stops(source); } @Override public Stops[] newArray(int size) { return new Stops[size]; } }; @Override public void writeToParcel(Parcel out, int flags) { out.writeString(route_id); out.writeString(id); out.writeString(title); out.writeString(lat); out.writeString(lon); out.writeLong(next); out.writeList(predictions); out.writeString(direction); out.writeList(path); writeBool(out, upcoming); writeBool(out, gps); } @SuppressWarnings("unchecked") public void readFromParcel(Parcel in) { route_id = in.readString(); id = in.readString(); title = in.readString(); lat = in.readString(); lon = in.readString(); next = in.readLong(); predictions = (ArrayList<Integer>) in.readArrayList(Integer.class.getClassLoader()); direction = in.readString(); path = in.readArrayList(Loc.class.getClassLoader()); upcoming = readBool(in); gps = readBool(in); } @Override public int describeContents() { return 0; } } /**************************/ void parseListView() { } void parseDetails() { } private static void writeBool(Parcel dest, boolean bool) { dest.writeInt(bool ? 1 : 0); } private static boolean readBool(Parcel in) { return (in.readInt() == 1); } } /* [ {"route_id":"saferidecamball", "title":"Cambridge All", "interval":60, "isSafeRide":true, "isRunning":false, "summary":"Runs 6pm-2am Sun-Wed, 6pm-3am Thu-Sat, during summer and holiday breaks."}, {"route_id":"saferidebostonall", "title":"Boston All", "interval":60, "isSafeRide":true, "isRunning":false, "summary":"Runs 6pm-2am Sun-Wed, 6pm-3am Thu-Sat, during summer and holiday breaks."}, {"route_id":"tech", "title":"Tech Shuttle", "interval":20, "isSafeRide":false, "isRunning":true, "summary":"Runs weekdays 7:15am-7:15pm, all year round."}, {"route_id":"northwest","title":"Northwest Shuttle","interval":20,"isSafeRide":false,"isRunning":true,"summary":"Runs weekdays 7:25am-6:42pm, all year round."} ] */ //http://mobile-dev.mit.edu/api/shuttles/?command=stopInfo&id=kendsq_d /* {"stops":[ {"id":"kendsq_d","title":"Kendall Square T","lat":"42.36237","lon":"-71.08613","next":1278095114,"predictions":[1200,2400,3600,4800],"route_id":"northwest","gps":true}, {"id":"kendsq_d","title":"Kendall Square T","lat":"42.36237","lon":"-71.08613","next":1278095876,"predictions":[1257,2514,3771],"route_id":"tech","gps":true} ], "now":1278094962} */ //http://mobile-dev.mit.edu/api/shuttles/?full=true&command=routeInfo&id=tech // >>> this "stops" has path+direction while above has route_id+gps /*[{"route_id":"tech", "title":"Tech Shuttle", "interval":20, "isSafeRide":false, "isRunning":true, "summary":"Runs weekdays 7:15am-7:15pm, all year round.", "stops":[ {"id":"kendsq_d", "title":"Kendall Square T", "lat":"42.36237", "lon":"-71.08613", "next":1276701398, "predictions":[1257,2514,3771,5028], "direction":"wcamp", "path":[{"lat":"42.36237","lon":"-71.08613"},{"lat":"42.3623199","lon":"-71.0854899"},{"lat":"42.3623","lon":"-71.08523"},{"lat":"42.36227","lon":"-71.08484"},{"lat":"42.36227","lon":"-71.08476"},{"lat":"42.36226","lon":"-71.08467"},{"lat":"42.3622299","lon":"-71.08441"},{"lat":"42.3622","lon":"-71.08433"},{"lat":"42.3621399","lon":"-71.08429"},{"lat":"42.36206","lon":"-71.08429"},{"lat":"42.36194","lon":"-71.0843"},{"lat":"42.36145","lon":"-71.08437"},{"lat":"42.36127","lon":"-71.08439"}]}, {"id":"amhewads", "title":"Amherst\/Wadsworth", "lat":"42.3612723", "lon":"-71.0843897", "next":1276701464,"predictions":[1257,2514,3771], "direction":"wcamp", "path":[{"lat":"42.36127","lon":"-71.08439"},{"lat":"42.36121","lon":"-71.0844"},{"lat":"42.36116","lon":"-71.08442"}, } } }]*/