import typing

import android.content
import android.graphics
import android.location
import android.os
import android.view
import java
import java.lang
import org.osmdroid
import org.osmdroid.api
import org.osmdroid.util
import org.osmdroid.views
import org.osmdroid.views.overlay

class GpsMyLocationProvider(IMyLocationProvider, android.location.LocationListener):
    def __init__(self, context: android.content.Context, /) -> None: ...
    def getLastKnownLocation(self) -> android.location.Location: ...
    def getLocationUpdateMinDistance(self) -> float: ...
    def getLocationUpdateMinTime(self) -> int: ...
    def onLocationChanged(self, location: android.location.Location, /) -> None: ...
    def onProviderDisabled(self, provider: str | java.lang.String, /) -> None: ...
    def onProviderEnabled(self, provider: str | java.lang.String, /) -> None: ...
    def onStatusChanged(self, provider: str | java.lang.String, status: int | java.jint | java.lang.Integer, extras: android.os.Bundle, /) -> None: ...
    def setLocationUpdateMinDistance(self, meters: float | java.jfloat | java.lang.Float, /) -> None: ...
    def setLocationUpdateMinTime(self, milliSeconds: int | java.jlong | java.lang.Long, /) -> None: ...
    def startLocationProvider(self, myLocationConsumer: IMyLocationConsumer, /) -> bool: ...
    def stopLocationProvider(self) -> None: ...

class IMyLocationConsumer(java.lang.Object):
    def onLocationChanged(self, arg1: android.location.Location, arg2: IMyLocationProvider, /) -> None: ...

class IMyLocationProvider(java.lang.Object):
    def getLastKnownLocation(self) -> android.location.Location: ...
    def startLocationProvider(self, arg1: IMyLocationConsumer, /) -> bool: ...
    def stopLocationProvider(self) -> None: ...

class MyLocationNewOverlay(org.osmdroid.views.overlay.IOverlayMenuProvider, org.osmdroid.views.overlay.Overlay, org.osmdroid.views.overlay.Overlay.Snappable, IMyLocationConsumer):
    MENU_MY_LOCATION: typing.ClassVar[int] = ...
    mCirclePaint: android.graphics.Paint = ...
    mDirectionArrowBitmap: android.graphics.Bitmap = ...
    mDirectionArrowCenterX: float = ...
    mDirectionArrowCenterY: float = ...
    mDrawAccuracyEnabled: bool = ...
    mIsFollowing: bool = ...
    mMapView: org.osmdroid.views.MapView = ...
    mMyLocationProvider: IMyLocationProvider = ...
    mPaint: android.graphics.Paint = ...
    mPersonBitmap: android.graphics.Bitmap = ...
    mPersonHotspot: android.graphics.PointF = ...
    @typing.overload
    def __init__(self, context: android.content.Context, mapView: org.osmdroid.views.MapView, /) -> None: ...
    @typing.overload
    def __init__(self, context: android.content.Context, myLocationProvider: IMyLocationProvider, mapView: org.osmdroid.views.MapView, /) -> None: ...
    @typing.overload
    def __init__(self, myLocationProvider: IMyLocationProvider, mapView: org.osmdroid.views.MapView, resourceProxy: org.osmdroid.ResourceProxy, /) -> None: ...
    def disableFollowLocation(self) -> None: ...
    def disableMyLocation(self) -> None: ...
    def draw(self, c: android.graphics.Canvas, mapView: org.osmdroid.views.MapView, shadow: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def drawMyLocation(self, canvas: android.graphics.Canvas, mapView: org.osmdroid.views.MapView, lastFix: android.location.Location, /) -> None: ...
    def enableFollowLocation(self) -> None: ...
    @typing.overload
    def enableMyLocation(self) -> bool: ...
    @typing.overload
    def enableMyLocation(self, myLocationProvider: IMyLocationProvider, /) -> bool: ...
    def getLastFix(self) -> android.location.Location: ...
    def getMyLocation(self) -> org.osmdroid.util.GeoPoint: ...
    def getMyLocationDrawingBounds(self, zoomLevel: int | java.jint | java.lang.Integer, lastFix: android.location.Location, reuse: android.graphics.Rect, /) -> android.graphics.Rect: ...
    def getMyLocationProvider(self) -> IMyLocationProvider: ...
    def isDrawAccuracyEnabled(self) -> bool: ...
    def isFollowLocationEnabled(self) -> bool: ...
    def isMyLocationEnabled(self) -> bool: ...
    def isOptionsMenuEnabled(self) -> bool: ...
    def onCreateOptionsMenu(self, pMenu: android.view.Menu, pMenuIdOffset: int | java.jint | java.lang.Integer, pMapView: org.osmdroid.views.MapView, /) -> bool: ...
    def onDetach(self, mapView: org.osmdroid.views.MapView, /) -> None: ...
    def onLocationChanged(self, location: android.location.Location, source: IMyLocationProvider, /) -> None: ...
    def onOptionsItemSelected(self, pItem: android.view.MenuItem, pMenuIdOffset: int | java.jint | java.lang.Integer, pMapView: org.osmdroid.views.MapView, /) -> bool: ...
    def onPrepareOptionsMenu(self, pMenu: android.view.Menu, pMenuIdOffset: int | java.jint | java.lang.Integer, pMapView: org.osmdroid.views.MapView, /) -> bool: ...
    def onSnapToItem(self, x: int | java.jint | java.lang.Integer, y: int | java.jint | java.lang.Integer, snapPoint: android.graphics.Point, mapView: org.osmdroid.api.IMapView, /) -> bool: ...
    def onTouchEvent(self, event: android.view.MotionEvent, mapView: org.osmdroid.views.MapView, /) -> bool: ...
    def runOnFirstFix(self, runnable: java.lang.Runnable, /) -> bool: ...
    def setDrawAccuracyEnabled(self, drawAccuracyEnabled: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setLocation(self, location: android.location.Location, /) -> None: ...
    def setMyLocationProvider(self, myLocationProvider: IMyLocationProvider, /) -> None: ...
    def setOptionsMenuEnabled(self, pOptionsMenuEnabled: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setPersonHotspot(self, x: float | java.jfloat | java.lang.Float, y: float | java.jfloat | java.lang.Float, /) -> None: ...
