Search in sources :

Example 11 with Network

use of im.tny.segvault.subway.Network in project underlx by underlx.

the class TopologyCache method loadNetwork.

public static Network loadNetwork(Context context, String id, String apiEndpoint) throws CacheException {
    String filename = "net-" + id;
    Topology t = null;
    try {
        FileInputStream fis = context.openFileInput(filename);
        ObjectInputStream is = new ObjectInputStream(fis);
        t = (Topology) is.readObject();
        is.close();
        fis.close();
    } catch (FileNotFoundException e) {
        throw new CacheException(e).addInfo("File " + filename + " not found");
    } catch (IOException e) {
        throw new CacheException(e).addInfo("IO exception");
    } catch (ClassNotFoundException e) {
        throw new CacheException(e).addInfo("Class not found");
    } catch (Exception e) {
        e.printStackTrace();
        throw new CacheException(e).addInfo("Unforeseen exception");
    }
    Network net = new Network(t.network.id, t.network.mainLocale, t.network.names, t.network.typCars, t.network.holidays, t.network.timezone, t.network.newsURL);
    for (API.POI poi : t.pois) {
        net.addPOI(new POI(poi.id, poi.type, poi.worldCoord, poi.webURL, poi.mainLocale, poi.names));
    }
    for (String lineid : t.network.lines) {
        API.Line l = t.lines.get(lineid);
        Line line = new Line(net, l.mainLocale, l.names, new HashSet<Stop>(), l.id, l.typCars, l.order);
        line.setColor(Color.parseColor("#" + l.color));
        boolean isFirstStationInLine = true;
        for (String sid : l.stations) {
            API.Station s = t.stations.get(sid);
            Station station = net.getStation(s.id);
            if (station == null) {
                Map<String, String> triviaURLs = new HashMap<>();
                for (Map.Entry<String, String> entry : s.triviaURLs.entrySet()) {
                    triviaURLs.put(entry.getKey(), apiEndpoint + entry.getValue());
                }
                Map<String, Map<String, String>> connURLs = new HashMap<>();
                for (Map.Entry<String, Map<String, String>> entry : s.connURLs.entrySet()) {
                    Map<String, String> urls = new HashMap<>();
                    for (Map.Entry<String, String> localeEntry : entry.getValue().entrySet()) {
                        urls.put(localeEntry.getKey(), apiEndpoint + localeEntry.getValue());
                    }
                    connURLs.put(entry.getKey(), urls);
                }
                station = new Station(net, s.id, s.name, s.altNames, new Station.Features(s.features.lift, s.features.bus, s.features.boat, s.features.train, s.features.airport), triviaURLs);
                station.setConnectionURLs(connURLs);
                // Lobbies
                for (String lid : s.lobbies) {
                    API.Lobby alobby = t.lobbies.get(lid);
                    Lobby lobby = new Lobby(alobby.id, alobby.name);
                    for (API.Exit aexit : alobby.exits) {
                        Lobby.Exit exit = new Lobby.Exit(aexit.id, aexit.worldCoord, aexit.streets, aexit.type);
                        lobby.addExit(exit);
                    }
                    for (API.Schedule asched : alobby.schedule) {
                        Schedule sched = new Schedule(asched.holiday, asched.day, asched.open, asched.openTime * 1000, asched.duration * 1000);
                        lobby.addSchedule(sched);
                    }
                    station.addLobby(lobby);
                }
                // POIs
                for (String poiId : s.pois) {
                    POI poi = net.getPOI(poiId);
                    if (poi != null) {
                        station.addPOI(poi);
                    }
                }
            }
            Stop stop = new Stop(station, line);
            line.addVertex(stop);
            station.addVertex(stop);
            if (isFirstStationInLine) {
                line.setFirstStop(stop);
                isFirstStationInLine = false;
            }
            // WiFi APs
            for (API.WiFiAP w : s.wiFiAPs) {
                // take line affinity into account
                if (w.line.equals(line.getId())) {
                    WiFiLocator.addBSSIDforStop(stop, new BSSID(w.bssid));
                }
            }
        }
        for (API.Schedule asched : l.schedule) {
            Schedule sched = new Schedule(asched.holiday, asched.day, asched.open, asched.openTime * 1000, asched.duration * 1000);
            line.addSchedule(sched);
        }
        for (API.WorldPath apath : l.worldPaths) {
            WorldPath path = new WorldPath(apath.id, apath.path);
            line.addPath(path);
        }
        net.addLine(line);
    }
    // Connections are within stations in the same line
    for (API.Connection c : t.connections) {
        Set<Stop> sFrom = net.getStation(c.from).vertexSet();
        Set<Stop> sTo = net.getStation(c.to).vertexSet();
        Stop from = null, to = null;
        for (Stop s : sFrom) {
            for (Stop s2 : sTo) {
                if (s.getLine().getId().equals(s2.getLine().getId())) {
                    from = s;
                    to = s2;
                }
            }
        }
        if (from != null && to != null) {
            Connection newConnection = net.addEdge(from, to);
            from.getLine().addEdge(from, to);
            newConnection.setTimes(new Connection.Times(c.typWaitS, c.typStopS, c.typS));
            newConnection.setWorldLength(c.worldLength);
            net.setEdgeWeight(newConnection, c.typS);
        }
    }
    for (API.Transfer tr : t.transfers) {
        Transfer newTransfer = new Transfer();
        // find stations with the right IDs for each line
        Station station = net.getStation(tr.station);
        for (Stop from : station.vertexSet()) {
            for (Stop to : station.vertexSet()) {
                if (from.getLine().getId().equals(tr.from) && to.getLine().getId().equals(tr.to)) {
                    net.addEdge(from, to, newTransfer);
                    net.setEdgeWeight(newTransfer, tr.typS);
                    newTransfer.setTimes(new Connection.Times(0, 0, tr.typS));
                }
            }
        }
    }
    for (API.Schedule asched : t.network.schedule) {
        Schedule sched = new Schedule(asched.holiday, asched.day, asched.open, asched.openTime * 1000, asched.duration * 1000);
        net.addSchedule(sched);
    }
    net.setDatasetAuthors(t.info.authors);
    net.setDatasetVersion(t.info.version);
    return net;
}
Also used : CacheException(im.tny.segvault.disturbances.exception.CacheException) Stop(im.tny.segvault.subway.Stop) HashMap(java.util.HashMap) FileNotFoundException(java.io.FileNotFoundException) Lobby(im.tny.segvault.subway.Lobby) Network(im.tny.segvault.subway.Network) Connection(im.tny.segvault.subway.Connection) IOException(java.io.IOException) POI(im.tny.segvault.subway.POI) WorldPath(im.tny.segvault.subway.WorldPath) FileInputStream(java.io.FileInputStream) CacheException(im.tny.segvault.disturbances.exception.CacheException) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) Line(im.tny.segvault.subway.Line) Station(im.tny.segvault.subway.Station) BSSID(im.tny.segvault.s2ls.wifi.BSSID) Schedule(im.tny.segvault.subway.Schedule) Transfer(im.tny.segvault.subway.Transfer) HashMap(java.util.HashMap) Map(java.util.Map) ObjectInputStream(java.io.ObjectInputStream)

Example 12 with Network

use of im.tny.segvault.subway.Network in project underlx by underlx.

the class Route method getNextStep.

public Step getNextStep(Path currentPath) {
    if (currentPath == null) {
        return get(0);
    }
    List<Connection> cur = currentPath.getEdgeList();
    List<Connection> tar = path.getEdgeList();
    if (cur.size() == 0) {
        return get(0);
    }
    // iterate over the target path until the last edge of the current path is found
    Connection lastCur = cur.get(cur.size() - 1);
    int tarIdx;
    for (tarIdx = 0; tarIdx < tar.size(); tarIdx++) {
        if (tar.get(tarIdx) == lastCur) {
            break;
        }
    }
    if (tarIdx >= tar.size()) {
        // so at the moment the user is not following the instructions
        if (get(0) instanceof EnterStep) {
            // if user is already on a path on the right direction, do not tell him to "catch a train" he is already in
            Stop direction = null;
            if (path.getGraph() instanceof Network) {
                direction = ((Network) path.getGraph()).getDirectionForConnection(lastCur);
            } else if (path.getGraph() instanceof Line) {
                direction = ((Line) path.getGraph()).getDirectionForConnection(lastCur);
            }
            if (direction != null && ((EnterStep) get(0)).getDirection() == direction.getStation()) {
                return get(1);
            }
        }
        return get(0);
    }
    // find next step
    for (; tarIdx < tar.size(); tarIdx++) {
        if (pathIndexToStep.get(tarIdx) != null) {
            return pathIndexToStep.get(tarIdx);
        }
    }
    return null;
}
Also used : Line(im.tny.segvault.subway.Line) Stop(im.tny.segvault.subway.Stop) Network(im.tny.segvault.subway.Network) Connection(im.tny.segvault.subway.Connection)

Example 13 with Network

use of im.tny.segvault.subway.Network in project underlx by underlx.

the class StationPOIFragment method update.

private void update() {
    if (mListener == null)
        return;
    MainService service = mListener.getMainService();
    if (service == null)
        return;
    Network net = service.getNetwork(networkId);
    if (net == null)
        return;
    final Station station = net.getStation(stationId);
    if (station == null)
        return;
    Locale l = Util.getCurrentLocale(getContext());
    final String lang = l.getLanguage();
    // POIs
    pois = station.getPOIs();
    Collections.sort(pois, new Comparator<POI>() {

        @Override
        public int compare(POI o1, POI o2) {
            return o1.getNames(lang)[0].compareTo(o2.getNames(lang)[0]);
        }
    });
    for (POI poi : pois) {
        POIView v = new POIView(getContext(), poi);
        v.setInteractionListener(new POIView.OnViewInteractionListener() {

            @Override
            public void onPOIClicked(POI poi) {
                if (googleMap == null || !mapLayoutReady) {
                    return;
                }
                Marker marker = markers.get(poi);
                if (marker != null) {
                    marker.showInfoWindow();
                }
                poiScrollView.fullScroll(NestedScrollView.FOCUS_UP);
                googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.fromLatLngZoom(marker.getPosition(), googleMap.getCameraPosition().zoom)));
            }
        });
        poisLayout.addView(v);
    }
    // Lobbies
    final int[] lobbyColors = Util.lobbyColors.clone();
    if (station.getLobbies().size() == 1) {
        lobbyColors[0] = Color.BLACK;
    }
    final ViewTreeObserver vto = mapView.getViewTreeObserver();
    if (vto.isAlive()) {
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

            public void onGlobalLayout() {
                mapLayoutReady = true;
                trySetupMap(station, pois, lobbyColors, lang);
                // remove the listener... or we'll be doing this a lot.
                ViewTreeObserver obs = mapView.getViewTreeObserver();
                obs.removeGlobalOnLayoutListener(this);
            }
        });
    }
    mapView.getMapAsync(new OnMapReadyCallback() {

        @Override
        public void onMapReady(GoogleMap mMap) {
            googleMap = mMap;
            trySetupMap(station, pois, lobbyColors, lang);
        }
    });
}
Also used : Locale(java.util.Locale) POIView(im.tny.segvault.disturbances.ui.widget.POIView) OnMapReadyCallback(com.google.android.gms.maps.OnMapReadyCallback) POI(im.tny.segvault.subway.POI) Marker(com.google.android.gms.maps.model.Marker) MainService(im.tny.segvault.disturbances.MainService) Station(im.tny.segvault.subway.Station) GoogleMap(com.google.android.gms.maps.GoogleMap) Network(im.tny.segvault.subway.Network) ViewTreeObserver(android.view.ViewTreeObserver)

Example 14 with Network

use of im.tny.segvault.subway.Network in project underlx by underlx.

the class HomeFragment method refresh.

private void refresh(boolean requestOnlineUpdate) {
    Realm realm = Application.getDefaultRealmInstance(getContext());
    boolean hasTripsToConfirm = Trip.getMissingConfirmTrips(realm).size() > 0;
    realm.close();
    if (hasTripsToConfirm) {
        if (unconfirmedTripsCard.getVisibility() == View.GONE) {
            FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
            Fragment newFragment = UnconfirmedTripsFragment.newInstance(1);
            transaction.replace(R.id.unconfirmed_trips_card, newFragment);
            transaction.commitAllowingStateLoss();
            unconfirmedTripsCard.setVisibility(View.VISIBLE);
        }
    } else {
        unconfirmedTripsCard.setVisibility(View.GONE);
    }
    if (mListener == null)
        return;
    MainService m = mListener.getMainService();
    if (m == null)
        return;
    if (requestOnlineUpdate) {
        m.getLineStatusCache().updateLineStatus();
        m.getStatsCache().updateStats();
    }
    Network net = m.getNetwork(MainService.PRIMARY_NETWORK_ID);
    if (net == null) {
        networkClosedCard.setVisibility(View.GONE);
        unconfirmedTripsCard.setVisibility(View.GONE);
        m.checkForTopologyUpdates();
    } else if (net.isOpen()) {
        networkClosedCard.setVisibility(View.GONE);
    } else {
        Formatter f = new Formatter();
        DateUtils.formatDateRange(getContext(), f, net.getNextOpenTime(), net.getNextOpenTime(), DateUtils.FORMAT_SHOW_TIME, net.getTimezone().getID());
        networkClosedView.setText(String.format(getString(R.string.warning_network_closed), f.toString()));
        networkClosedCard.setVisibility(View.VISIBLE);
    }
    recomputeShortcutVisibility();
}
Also used : MainService(im.tny.segvault.disturbances.MainService) FragmentTransaction(android.support.v4.app.FragmentTransaction) Formatter(java.util.Formatter) Network(im.tny.segvault.subway.Network) Realm(io.realm.Realm) TopFragment(im.tny.segvault.disturbances.ui.fragment.TopFragment) Fragment(android.support.v4.app.Fragment) UnconfirmedTripsFragment(im.tny.segvault.disturbances.ui.fragment.UnconfirmedTripsFragment) HomeStatsFragment(im.tny.segvault.disturbances.ui.fragment.HomeStatsFragment) HomeLinesFragment(im.tny.segvault.disturbances.ui.fragment.HomeLinesFragment)

Example 15 with Network

use of im.tny.segvault.subway.Network in project underlx by underlx.

the class MainActivity method onLineLinkClicked.

public void onLineLinkClicked(String destination) {
    if (locService != null) {
        for (Network network : locService.getNetworks()) {
            Line line;
            if ((line = network.getLine(destination)) != null) {
                Intent intent = new Intent(this, LineActivity.class);
                intent.putExtra(LineActivity.EXTRA_LINE_ID, line.getId());
                intent.putExtra(LineActivity.EXTRA_NETWORK_ID, network.getId());
                startActivity(intent);
                return;
            }
        }
    }
}
Also used : Line(im.tny.segvault.subway.Line) Network(im.tny.segvault.subway.Network) Intent(android.content.Intent)

Aggregations

Network (im.tny.segvault.subway.Network)19 Line (im.tny.segvault.subway.Line)8 Station (im.tny.segvault.subway.Station)7 Intent (android.content.Intent)5 MainService (im.tny.segvault.disturbances.MainService)5 Stop (im.tny.segvault.subway.Stop)4 Realm (io.realm.Realm)4 SharedPreferences (android.content.SharedPreferences)3 SpannableString (android.text.SpannableString)3 Date (java.util.Date)3 PendingIntent (android.app.PendingIntent)2 View (android.view.View)2 ViewTreeObserver (android.view.ViewTreeObserver)2 Button (android.widget.Button)2 LinearLayout (android.widget.LinearLayout)2 TextView (android.widget.TextView)2 GoogleMap (com.google.android.gms.maps.GoogleMap)2 OnMapReadyCallback (com.google.android.gms.maps.OnMapReadyCallback)2 Marker (com.google.android.gms.maps.model.Marker)2 CacheException (im.tny.segvault.disturbances.exception.CacheException)2