/**
*
This file is part of the "Get There!" application for android developed
for the SFWR ENG 4G06 Capstone course in the 2014/2015 Fall/Winter
terms at McMaster University.
Copyright (C) 2015 M. Fluder, T. Miele, N. Mio, M. Ngo, and J. Rabaya
This program 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.
This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.capstone.transit.trans_it;
import android.content.Intent;
import android.content.res.AssetManager;
import android.location.Location;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
public class MapActivity extends FragmentActivity {
private GoogleMap mMap; // Might be null if Google Play services APK is not available.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
setUpMapIfNeeded();
testCameraChange();
infoWindowClick();
//Map Activity Done
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
setUpMap();
mMap.setMyLocationEnabled(true);
}
}
}
public ArrayList<String> createLatArrayList(){
// LatV = lat values
// Used array lists due to dyanmic size setting
AssetManager mngr;
String line = null;
ArrayList<String> LatV = new ArrayList<String>();
int count=0;
boolean skillcheck = false;
try{
mngr = getAssets();
InputStream is = mngr.open("stops.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while((line=br.readLine()) != null){ // Read until last line in .txt file
if(count>0){
line = line.toUpperCase();
String[] ArrayValues = line.split(","); // Seperate line by commas into a list
LatV.add(ArrayValues[0]); // Access first index (latitude) and add to ArrayList
}
count++;
}
//System.out.print(LatV.get(1));
System.out.print("Got here");
br.close();
}
catch (IOException e1){
}
return LatV;
}
public ArrayList<String> createLonArrayList(){
// LonV = lon values
// Used array lists due to dyanmic size setting
AssetManager mngr;
String line = null;
ArrayList<String> LonV = new ArrayList<String>();
int count=0;
boolean skillcheck = false;
try{
mngr = getAssets();
InputStream is = mngr.open("stops.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while((line=br.readLine()) != null){ // Read until last line in .txt file
if(count>0){
line = line.toUpperCase();
String[] ArrayValues = line.split(","); // Seperate line by commas into a list
LonV.add(ArrayValues[3]); // Access first index (latitude) and add to ArrayList
}
count++;
}
System.out.print(LonV.get(1));
br.close();
}
catch (IOException e1){
}
return LonV;
}
public ArrayList<String> createStopNameArrayList(){
// LonV = lon values
// Used array lists due to dyanmic size setting
AssetManager mngr;
String line = null;
ArrayList<String> NameV = new ArrayList<String>();
int count=0;
boolean skillcheck = false;
try{
mngr = getAssets();
InputStream is = mngr.open("stops.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while((line=br.readLine()) != null){ // Read until last line in .txt file
if(count>0){
line = line.toUpperCase();
String[] ArrayValues = line.split(","); // Seperate line by commas into a list
NameV.add(ArrayValues[8]); // Access first index (latitude) and add to ArrayList
}
count++;
}
br.close();
}
catch (IOException e1){
}
return NameV;
}
public ArrayList<String> createStopIDArrayList(){
AssetManager mngr;
String line = null;
ArrayList<String> StopID = new ArrayList<String>();
int count=0;
boolean skillcheck = false;
try{
mngr = getAssets();
InputStream is = mngr.open("stops.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while((line=br.readLine()) != null){ // Read until last line in .txt file
if(count>0){
line = line.toUpperCase();
String[] ArrayValues = line.split(","); // Seperate line by commas into a list
StopID.add(ArrayValues[4]); // Access first index (latitude) and add to ArrayList
}
count++;
}
br.close();
}
catch (IOException e1){
}
return StopID;
}
public ArrayList<String> createStopCodeArrayList(){
AssetManager mngr;
String line = null;
ArrayList<String> StopCode = new ArrayList<String>();
int count=0;
boolean skillcheck = false;
try{
mngr = getAssets();
InputStream is = mngr.open("stops.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while((line=br.readLine()) != null){ // Read until last line in .txt file
if(count>0){
line = line.toUpperCase();
String[] ArrayValues = line.split(","); // Seperate line by commas into a list
StopCode.add(ArrayValues[2]); // Access first index (latitude) and add to ArrayList
}
count++;
}
br.close();
}
catch (IOException e1){
}
return StopCode;
}
public List<Marker> createMarkerList(){
// Storing the latitude / longitude / names by calling their respective functions
ArrayList<String> LatValues = createLatArrayList();
ArrayList<String> LonValues = createLonArrayList();
ArrayList<String> StopNames = createStopNameArrayList();
ArrayList<String> StopIDs = createStopIDArrayList();
ArrayList<String> StopCodes = createStopCodeArrayList();
// Creating a marker list to store the markers
List<Marker> markers = new ArrayList<Marker>();
String StopName,StopID,StopCode;
final int size = LatValues.size();
double LatV,LonV;
int i = 0;
while(i<size){
// Looping through both lists and setting values from strings to doubles
LatV = Double.parseDouble(LatValues.get(i));
LonV = Double.parseDouble(LonValues.get(i));
StopName = StopNames.get(i);
StopID = StopIDs.get(i);
StopCode = StopCodes.get(i);
// Set a marker for each iteration
// Add each marker to the list "Markers"
Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(LatV, LonV)).title(StopName));
marker.setSnippet(StopCode);
marker.setVisible(false);
markers.add(marker);
i++;
}
return markers;
}
private void setUpMap() {
mMap.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(43.2500,-79.919501), 13.0f) );
}
private void testCameraChange(){
// Rather than completely deleting the markers depending on zoom level, we just change the visibility
// property to true or false depending on the situation
final List<Marker> markers = createMarkerList(); // Returns the markers list as well as sets the markers on the map
final int size = markers.size(); // retrieves length to use for the for loop
mMap.setOnCameraChangeListener( new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange( CameraPosition cameraPosition ) {
if(mMap.getCameraPosition().zoom >= 15){ // If zoomed in sufficiently, sets the visibility to true
for(int a=0;a<size;a++){
markers.get(a).setVisible(true);
}
}
else{
for(int a=0;a<size;a++){
markers.get(a).setVisible(false); // If not zoomed in sufficiently, sets the visibility to false
}
}
}
});
}
private void infoWindowClick(){
mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Intent intent = new Intent(getBaseContext(), StopListActivity.class);
intent.putExtra("STOP_CODE", marker.getSnippet()); // Passing stop ID to next activity
startActivity(intent);
}
});
}
}