/** AirCasting - Share your Air! Copyright (C) 2011-2012 HabitatMap, Inc. 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/>. You can contact the authors by email at <info@habitatmap.org> */ package pl.llp.aircasting.view.overlay; import pl.llp.aircasting.helper.LocationConversionHelper; import pl.llp.aircasting.helper.ResourceHelper; import pl.llp.aircasting.helper.SoundHelper; import pl.llp.aircasting.model.Measurement; import pl.llp.aircasting.model.Sensor; import pl.llp.aircasting.model.SensorManager; import pl.llp.aircasting.view.presenter.MeasurementPresenter; import android.graphics.Canvas; import android.graphics.Point; import android.graphics.drawable.Drawable; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; import com.google.android.maps.Projection; import com.google.inject.Inject; import java.util.List; import static pl.llp.aircasting.util.DrawableTransformer.centerAt; public class TraceOverlay extends BufferingOverlay<Measurement> { @Inject MeasurementPresenter measurementPresenter; @Inject ResourceHelper resourceHelper; @Inject SensorManager sensorManager; @Inject SoundHelper soundHelper; @Override protected void performDraw(Canvas canvas, Projection projection) { if(shouldSkipDrawing()) return; List<Measurement> fullView = measurementPresenter.getFullView(); // Avoid concurrent modification //noinspection ForLoopReplaceableByForEach for (int i = 0, fullViewSize = fullView.size(); i < fullViewSize - 1; i++) { Measurement measurement = fullView.get(i); drawPoint(canvas, projection, measurement); } } private boolean shouldSkipDrawing() { return sessionManager.isLocationless(); } @Override protected void performUpdate(Canvas canvas, Projection projection, Measurement measurement) { drawPoint(canvas, projection, measurement); } private void drawPoint(Canvas canvas, Projection projection, Measurement measurement) { double value = measurement.getValue(); Sensor sensor = sensorManager.getVisibleSensor(); if (soundHelper.shouldDisplay(sensor, value)) { Drawable bullet = resourceHelper.getBulletAbsolute(sensor, value); GeoPoint geoPoint = LocationConversionHelper.geoPoint(measurement.getLatitude(), measurement.getLongitude()); Point point = projection.toPixels(geoPoint, null); centerAt(bullet, point); bullet.draw(canvas); } } public void stopDrawing(MapView view) { super.stopDrawing(view); } }