package net.naonedbus.map.layer; import java.io.IOException; import java.util.List; import net.naonedbus.activity.impl.ParkingDetailActivity; import net.naonedbus.bean.Equipement; import net.naonedbus.bean.parking.Parking; import net.naonedbus.bean.parking.pub.ParkingPublic; import net.naonedbus.intent.ParamIntent; import net.naonedbus.manager.impl.ParkingPublicManager; import net.naonedbus.manager.impl.ParkingRelaiManager; import net.naonedbus.map.ItemSelectedInfo; import net.naonedbus.utils.FormatUtils; import org.json.JSONException; import android.content.Context; import android.content.Intent; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.bugsense.trace.BugSenseHandler; import com.google.android.gms.maps.model.BitmapDescriptor; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.MarkerOptions; import com.twotoasters.clusterkraf.ClusterPoint; public class ParkingMapLayer extends MapLayer { private SparseArray<Parking> mParkings = new SparseArray<Parking>(); public ParkingMapLayer(final LayoutInflater inflater) { super(inflater); } @Override public void chooseMarker(final MarkerOptions markerOptions, final ClusterPoint clusterPoint) { final Equipement parking = (Equipement) clusterPoint.getPointAtOffset(0).getTag(); final BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(Equipement.Type.TYPE_PARKING.getMapPin()); final String title = parking.getNom(); markerOptions.icon(icon); markerOptions.title(title); } @Override protected ItemSelectedInfo getItemSelectedInfo(final Context context, final Equipement item) { return new ItemSelectedInfo() { @Override public String getTitle() { return item.getNom(); } @Override public String getDescription(final Context context) { loadParkings(context); final Parking parking = mParkings.get(item.getId()); final String description; if (parking instanceof ParkingPublic) { final ParkingPublic parkingPublic = (ParkingPublic) parking; description = FormatUtils.formatParkingPublic(context, parkingPublic.getStatut(), parkingPublic.getPlacesDisponibles()); } else { description = item.getAdresse(); } return description; } @Override public List<View> getSubview(final ViewGroup root) { return null; } @Override public Integer getResourceAction() { return null; } @Override public Intent getIntent(final Context context) { loadParkings(context); final Parking parking = mParkings.get(item.getId()); if (parking instanceof ParkingPublic) { final ParamIntent intent = new ParamIntent(context, ParkingDetailActivity.class); intent.putExtra(ParkingDetailActivity.PARAM_PARKING, parking); return intent; } else { return null; } } }; } private void loadParkings(Context context) { if (mParkings.size() == 0) { final ParkingPublicManager publicManager = ParkingPublicManager.getInstance(); final ParkingRelaiManager relaiManager = ParkingRelaiManager.getInstance(); try { for (Parking parking : publicManager.getAll(context)) { mParkings.put(parking.getId(), parking); } for (Parking parking : relaiManager.getAll(context.getContentResolver())) { mParkings.put(parking.getId(), parking); } } catch (final IOException e) { BugSenseHandler.sendException(e); } catch (final JSONException e) { BugSenseHandler.sendException(e); } } } }