net.naonedbus.activity.map.layerloader.impl.ParkingMapLayer.java Source code

Java tutorial

Introduction

Here is the source code for net.naonedbus.activity.map.layerloader.impl.ParkingMapLayer.java

Source

/**
 * Copyright (C) 2013 Romain Guefveneu.
 *   
 *  This file is part of naonedbus.
 *   
 *  Naonedbus 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.
 *  
 *  Naonedbus 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 net.naonedbus.activity.map.layerloader.impl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import net.naonedbus.R;
import net.naonedbus.activity.map.layerloader.ItemSelectedInfo;
import net.naonedbus.activity.map.layerloader.MapLayer;
import net.naonedbus.activity.map.overlay.BasicItemizedOverlay;
import net.naonedbus.activity.map.overlay.ParkingItemizedOverlay;
import net.naonedbus.activity.map.overlay.TypeOverlayItem;
import net.naonedbus.activity.map.overlay.item.BasicOverlayItem;
import net.naonedbus.bean.Equipement;
import net.naonedbus.bean.parking.Parking;
import net.naonedbus.bean.parking.pub.ParkingPublic;
import net.naonedbus.bean.parking.pub.ParkingPublicStatut;
import net.naonedbus.bean.parking.relai.ParkingRelai;
import net.naonedbus.manager.impl.EquipementManager;
import net.naonedbus.manager.impl.ParkingPublicManager;
import net.naonedbus.manager.impl.ParkingRelaiManager;
import net.naonedbus.utils.GeoPointUtils;
import net.naonedbus.utils.ParkingUtils;

import org.json.JSONException;

import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationManager;
import android.net.Uri;
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;

import com.bugsense.trace.BugSenseHandler;
import com.google.android.maps.GeoPoint;

public class ParkingMapLayer implements MapLayer {

    private static EquipementManager equipementManager;
    private final SparseArray<Parking> parkingList = new SparseArray<Parking>();

    public ParkingMapLayer() {
        equipementManager = EquipementManager.getInstance();
    }

    @Override
    public ItemSelectedInfo getItemInfo(final Context context, final BasicOverlayItem item) {
        return new ItemSelectedInfo() {

            @Override
            public String getTitle() {
                return item.getTitle();
            }

            @Override
            public List<View> getSubview(final ViewGroup root) {
                return null;
            }

            @Override
            public Integer getResourceDrawable() {
                final Parking parking = parkingList.get(item.getId());
                if (parking instanceof ParkingPublic) {
                    return R.drawable.map_layer_parking;
                } else {
                    return R.drawable.map_layer_parking_relai;
                }
            }

            @Override
            public Integer getResourceColor() {
                final Parking parking = parkingList.get(item.getId());
                if (parking instanceof ParkingPublic) {
                    final ParkingPublic parkingPublic = ((ParkingPublic) parking);
                    int resColor = 0;
                    if (parkingPublic.getStatut() == ParkingPublicStatut.OUVERT) {
                        resColor = ParkingUtils.getSeuilCouleurId(parkingPublic.getPlacesDisponibles());
                    } else {
                        resColor = parkingPublic.getStatut().getColorRes();
                    }
                    return resColor;
                } else {
                    return R.color.parking_state_blue;
                }
            }

            @Override
            public Integer getResourceAction() {
                return R.drawable.balloon_navigation;
            }

            @Override
            public String getDescription(final Context context) {
                final Parking parking = parkingList.get(item.getId());
                String details = "";
                int placesDisponibles = 0;

                if (parking instanceof ParkingPublic) {
                    final ParkingPublic parkingPublic = ((ParkingPublic) parking);
                    placesDisponibles = ((ParkingPublic) parking).getPlacesDisponibles();
                    if (parkingPublic.getStatut() == ParkingPublicStatut.OUVERT) {
                        if (placesDisponibles > 0) {
                            details = context.getResources().getQuantityString(R.plurals.parking_places_disponibles,
                                    placesDisponibles, placesDisponibles);
                        } else {
                            details = context.getResources().getString(R.string.parking_places_disponibles_zero);
                        }
                    } else {
                        details = context.getResources().getString(parkingPublic.getStatut().getTitleRes());
                    }

                } else if (parking instanceof ParkingRelai) {
                    details = context.getResources().getString(R.string.map_calque_parking_relai);
                }

                return details;
            }

            @Override
            public Intent getIntent(final Context context) {
                final Parking parking = parkingList.get(item.getId());

                final Uri uri = Uri.parse(String.format(Locale.ENGLISH, NAVIGATION_INTENT, parking.getLatitude(),
                        parking.getLongitude()));

                return new Intent(Intent.ACTION_VIEW, uri);
            }

            @Override
            public GeoPoint getGeoPoint() {
                return item.getPoint();
            }

        };

    }

    @Override
    public BasicItemizedOverlay getOverlay(final Context context, final Location location) {
        final List<Parking> parkings = new ArrayList<Parking>();

        try {
            if (parkings.size() == 0) {
                final ParkingPublicManager publicManager = ParkingPublicManager.getInstance();
                final ParkingRelaiManager relaiManager = ParkingRelaiManager.getInstance();

                parkings.addAll(publicManager.getAll(context));
                parkings.addAll(relaiManager.getAll(context.getContentResolver()));
            }
        } catch (final IOException e) {
            BugSenseHandler.sendException(e);
        } catch (final JSONException e) {
            BugSenseHandler.sendException(e);
        }

        final ParkingItemizedOverlay newItemizedOverlay = new ParkingItemizedOverlay(context.getResources());
        BasicOverlayItem parkingOverlayItem;

        for (final Parking parking : parkings) {
            parkingOverlayItem = new BasicOverlayItem(GeoPointUtils.getGeoPoint(parking), parking.getNom(),
                    TypeOverlayItem.TYPE_PARKING);
            parkingOverlayItem.setId(parking.getId());
            newItemizedOverlay.addOverlay(parkingOverlayItem);
            parkingList.put(parking.getId(), parking);
        }

        return newItemizedOverlay;
    }

    @Override
    public BasicItemizedOverlay getOverlay(final Context context, final int defaultItemId) {
        final BasicItemizedOverlay newItemizedOverlay;
        final Equipement item = equipementManager.getSingle(context.getContentResolver(), defaultItemId);
        if (item != null) {
            final Location location = new Location(LocationManager.GPS_PROVIDER);
            location.setLatitude(item.getLatitude());
            location.setLongitude(item.getLongitude());
            newItemizedOverlay = getOverlay(context, location);
        } else {
            newItemizedOverlay = new ParkingItemizedOverlay(context.getResources());
        }
        return newItemizedOverlay;
    }

    @Override
    public boolean isMoveable() {
        return false;
    }
}