/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.mozstumbler.client.mapview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.location.Location;
import org.mozilla.osmdroid.util.GeoPoint;
import org.mozilla.osmdroid.views.MapView;
import org.mozilla.osmdroid.views.Projection;
import org.mozilla.osmdroid.views.overlay.Overlay;
class AccuracyCircleOverlay extends Overlay {
private final DevicePixelConverter mConvertPx;
private GeoPoint mPoint;
private float mAccuracy;
private Paint mCircleFillPaint = new Paint();
private Paint mCircleStrokePaint = new Paint();
private Paint mCenterPaint = new Paint();
private Paint mCenterStrokePaint = new Paint();
AccuracyCircleOverlay(Context ctx, int color) {
super(ctx);
mConvertPx = new DevicePixelConverter(ctx);
mCircleFillPaint.setARGB(40, 100, 100, 255);
mCircleFillPaint.setStyle(Paint.Style.FILL);
mCircleStrokePaint.setARGB(165, 100, 100, 255);
mCircleStrokePaint.setStyle(Paint.Style.STROKE);
mCenterPaint.setColor(color);
mCenterPaint.setStyle(Paint.Style.FILL);
mCenterStrokePaint.setARGB(255, 255, 255, 255);
mCenterStrokePaint.setStyle(Paint.Style.STROKE);
mCenterStrokePaint.setStrokeWidth(mConvertPx.pxToDp(2.5f));
}
protected void draw(Canvas c, MapView osmv, boolean shadow) {
if (shadow || mPoint == null) {
return;
}
Projection pj = osmv.getProjection();
Point center = pj.toPixels(mPoint, null);
final int radius = mConvertPx.pxToDp(pj.metersToEquatorPixels(mAccuracy));
final int blueDotRadius = mConvertPx.pxToDp(7.5f);
// Fill
c.drawCircle(center.x, center.y, radius, mCircleFillPaint);
// Border
c.drawCircle(center.x, center.y, radius, mCircleStrokePaint);
// Center
c.drawCircle(center.x, center.y, blueDotRadius, mCenterPaint);
c.drawCircle(center.x, center.y, blueDotRadius, mCenterStrokePaint);
}
public GeoPoint getLocation() {
return mPoint;
}
public void setLocation(final Location location) {
mAccuracy = location.getAccuracy();
mPoint = new GeoPoint(location.getLatitude(), location.getLongitude());
}
}