com.g_node.gca.map.MapActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.g_node.gca.map.MapActivity.java

Source

/**
 * Copyright (c) 2014, German Neuroinformatics Node (G-Node)
 * Copyright (c) 2013, Yasir Adnan <adnan.ayon@gmail.com>
 * Customized for 2nd version by Shumail Mohy-ud-Din <shumailmohyuddin@gmail.com>
 * License: BSD-3 (See LICENSE)
 */

package com.g_node.gca.map;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.InfoWindowAdapter;
import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.g_node.gcaa.R;

public class MapActivity extends FragmentActivity {

    private static GoogleMap supportMap;
    String gtag = "GCA-map";

    private ArrayList<LatLng> allCoordinates = new ArrayList<LatLng>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);

        getActionBar().setIcon(getResources().getDrawable(R.drawable.icon_maps));
        getActionBar().setTitle("Locations Map");

        getActionBar().setDisplayHomeAsUpEnabled(true);

        try {
            MapsInitializer.initialize(this);
        } catch (GooglePlayServicesNotAvailableException e) {
            e.printStackTrace();
        }
        locationMarkers();

        //Lisener for infoWindow to get LAT & LONG of that marker
        supportMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

            public void onInfoWindowClick(Marker marker) {
                LatLng position = marker.getPosition();
                Log.i(gtag, "Marker Info Clicked - LAT: " + position.latitude + ", LONG: " + position.longitude);

                Intent navigateIntent = new Intent(Intent.ACTION_VIEW);

                String currentLat = String.valueOf(position.latitude);
                String currentLong = String.valueOf(position.longitude);
                String currLabel = marker.getTitle();

                String geoLocation = "geo:0,0?q=" + currentLat + "," + currentLong + "(" + currLabel + ")";
                navigateIntent.setData(Uri.parse(geoLocation));
                startActivity(navigateIntent);

            }
        });

        //adapter for custom info-window - added icon for navigation
        supportMap.setInfoWindowAdapter(new InfoWindowAdapter() {

            @Override
            public View getInfoWindow(Marker arg0) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public View getInfoContents(Marker arg0) {
                // TODO Auto-generated method stub
                // Getting view from the layout file info_window_layout
                View v = getLayoutInflater().inflate(R.layout.info_window_layout, null);

                // Getting reference to the TextView to set title
                TextView note = (TextView) v.findViewById(R.id.note);

                note.setText(arg0.getTitle());

                // Returning the view containing InfoWindow contents
                return v;
            }
        });

    }

    //Main map points function
    public void locationMarkers() {
        /*
         * Implement Location Markers
         */
        BufferedReader jsonReader = new BufferedReader(
                new InputStreamReader(this.getResources().openRawResource(R.raw.map)));
        StringBuilder jsonBuilder = new StringBuilder();
        try {
            for (String line = null; (line = jsonReader.readLine()) != null;) {
                jsonBuilder.append(line).append("\n");
            }

            JSONTokener tokener = new JSONTokener(jsonBuilder.toString());
            JSONArray jsonArray = new JSONArray(tokener);

            for (int index = 0; index < jsonArray.length(); index++) {

                JSONObject jsonObject = jsonArray.getJSONObject(index);
                /*
                 * getting Latitude
                 */
                double getLat = jsonObject.getJSONObject("point").getDouble("lat");
                /*
                 * getting Longitude
                 */
                double getLng = jsonObject.getJSONObject("point").getDouble("long");
                /*
                 * getting Location Type
                 */
                int gettype = jsonObject.getInt("type");
                /*
                 * getting zoomto value
                 */
                int getZoomto = 1;
                if (jsonObject.has("zoomto")) {
                    getZoomto = jsonObject.getInt("zoomto");
                }
                /*
                 * Venue name
                 */
                String name = jsonObject.getString("name");
                LatLng myLoc = new LatLng(getLat, getLng);
                if (getZoomto == 1) {
                    /*
                     * Adding only food and venue coordinates for automatic zoom
                     * level
                     */
                    allCoordinates.add(myLoc);
                }
                FragmentManager fmanager = getSupportFragmentManager();
                Fragment fragment = fmanager.findFragmentById(R.id.map);
                SupportMapFragment supportmapfragment = (SupportMapFragment) fragment;
                supportMap = supportmapfragment.getMap();
                if (supportMap != null) {
                    /*
                     * implementing different colors markers for different
                     * location's
                     */
                    switch (gettype) {
                    case 0:
                        /*
                         * Conference Venue Marker
                         */
                        supportMap.addMarker(new MarkerOptions().position(myLoc).title(name)
                                .icon(BitmapDescriptorFactory.fromResource(R.drawable.conference)));
                        break;
                    case 1:
                        /*
                         * University Marker
                         */
                        supportMap.addMarker(new MarkerOptions().position(myLoc).title(name)
                                .icon(BitmapDescriptorFactory.fromResource(R.drawable.university)));
                        break;
                    case 2:
                        /*
                         * Hotel -1 Marker
                         */
                        supportMap.addMarker(new MarkerOptions().position(myLoc).title(name)
                                .icon(BitmapDescriptorFactory.fromResource(R.drawable.hotel_1)));
                        break;
                    case 3:
                        /*
                         * Hotel -2 Marker
                         */
                        supportMap.addMarker(new MarkerOptions().position(myLoc).title(name)
                                .icon(BitmapDescriptorFactory.fromResource(R.drawable.hotel_2)));
                        break;
                    case 4:
                        /*
                         * Transport Marker
                         */
                        supportMap.addMarker(new MarkerOptions().position(myLoc).title(name)
                                .icon(BitmapDescriptorFactory.fromResource(R.drawable.transport)));
                        break;
                    case 5:
                        /*
                         * Food Marker
                         */
                        supportMap.addMarker(new MarkerOptions().position(myLoc).title(name)
                                .icon(BitmapDescriptorFactory.fromResource(R.drawable.food)));
                        break;

                    default:
                        break;
                    }
                }

            }

            /*
             * Automatic zoom level
             */
            LatLngBounds.Builder builder = new LatLngBounds.Builder();
            for (LatLng m : allCoordinates) {
                builder = builder.include(m);
            }
            LatLngBounds bounds = builder.build();
            CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds,
                    this.getResources().getDisplayMetrics().widthPixels
                            - (int) (this.getResources().getDisplayMetrics().widthPixels * 0.1),
                    this.getResources().getDisplayMetrics().heightPixels
                            - (int) (this.getResources().getDisplayMetrics().heightPixels * 0.1),
                    50);
            /*
             * Move Camera
             */
            supportMap.moveCamera(cu);
            /*
             * Set My Current Location Enable
             */
            supportMap.setMyLocationEnabled(true);
            supportMap.getUiSettings().setMyLocationButtonEnabled(true);
            /*
             * Set Compass Enable
             */
            supportMap.getUiSettings().setCompassEnabled(true);
            /*
             * Set Manual ZoomControl Enable
             */
            supportMap.getUiSettings().setZoomControlsEnabled(false);
        } catch (FileNotFoundException e) {
            Log.e("jsonFile", "file not found");
        } catch (IOException e) {
            Log.e("jsonFile", "ioerror");
        } catch (JSONException e) {
            Log.e("jsonFile", Log.getStackTraceString(e));
        }

    }
}