1package eu.siacs.conversations.ui.widget;
2
3import android.content.Context;
4import android.graphics.Bitmap;
5import android.graphics.Canvas;
6import android.graphics.Paint;
7import android.graphics.Point;
8import android.location.Location;
9
10import androidx.core.content.ContextCompat;
11
12import org.osmdroid.util.GeoPoint;
13import org.osmdroid.util.TileSystem;
14import org.osmdroid.views.MapView;
15import org.osmdroid.views.overlay.mylocation.SimpleLocationOverlay;
16
17import eu.siacs.conversations.Config;
18import eu.siacs.conversations.R;
19
20public class MyLocation extends SimpleLocationOverlay {
21 private final GeoPoint position;
22 private final float accuracy;
23 private final Point mapCenterPoint;
24 private final Paint fill;
25 private final Paint outline;
26
27 public MyLocation(final Context ctx, final Bitmap icon, final Location position) {
28 super(icon);
29 this.mapCenterPoint = new Point();
30 this.fill = new Paint(Paint.ANTI_ALIAS_FLAG);
31 final int accent = ContextCompat.getColor(ctx,R.color.blue500);
32 fill.setColor(accent);
33 fill.setStyle(Paint.Style.FILL);
34 this.outline = new Paint(Paint.ANTI_ALIAS_FLAG);
35 outline.setColor(accent);
36 outline.setAlpha(50);
37 outline.setStyle(Paint.Style.FILL);
38 this.position = new GeoPoint(position);
39 this.accuracy = position.getAccuracy();
40 }
41
42 @Override
43 public void draw(final Canvas c, final MapView view, final boolean shadow) {
44 super.draw(c, view, shadow);
45
46 view.getProjection().toPixels(position, mapCenterPoint);
47 c.drawCircle(mapCenterPoint.x, mapCenterPoint.y,
48 Math.max(Config.Map.MY_LOCATION_INDICATOR_SIZE + Config.Map.MY_LOCATION_INDICATOR_OUTLINE_SIZE,
49 accuracy / (float) TileSystem.GroundResolution(position.getLatitude(), view.getZoomLevel())
50 ), this.outline);
51 c.drawCircle(mapCenterPoint.x, mapCenterPoint.y, Config.Map.MY_LOCATION_INDICATOR_SIZE, this.fill);
52 }
53}