import typing

import android.graphics
import android.location
import android.os
import java
import java.chaquopy
import java.lang
import java.util

class IGeoPoint(java.lang.Object):
    def getLatitude(self) -> float: ...
    def getLatitudeE6(self) -> int: ...
    def getLongitude(self) -> float: ...
    def getLongitudeE6(self) -> int: ...

class IMap(java.lang.Object):
    def addMarker(self, arg1: Marker, /) -> None: ...
    def addPointsToPolyline(self, arg1: int | java.jint | java.lang.Integer, /, *arg2: IGeoPoint) -> None: ...
    def addPolyline(self, arg1: Polyline, /) -> int: ...
    def clear(self) -> None: ...
    def clearPolyline(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def getBearing(self) -> float: ...
    def getCenter(self) -> IGeoPoint: ...
    def getProjection(self) -> IProjection: ...
    def getZoomLevel(self) -> float: ...
    def isMyLocationEnabled(self) -> bool: ...
    def setBearing(self, arg1: float | java.jfloat | java.lang.Float, /) -> None: ...
    def setCenter(self, arg1: float | java.jdouble | java.lang.Double, arg2: float | java.jdouble | java.lang.Double, /) -> None: ...
    def setMyLocationEnabled(self, arg1: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setOnCameraChangeListener(self, arg1: OnCameraChangeListener, /) -> None: ...
    def setPosition(self, arg1: IPosition, /) -> None: ...
    def setZoom(self, arg1: float | java.jfloat | java.lang.Float, /) -> None: ...
    def zoomIn(self) -> bool: ...
    def zoomOut(self) -> bool: ...

class IMapController(java.lang.Object):
    def animateTo(self, arg1: IGeoPoint, /) -> None: ...
    def scrollBy(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
    def setCenter(self, arg1: IGeoPoint, /) -> None: ...
    def setZoom(self, arg1: int | java.jint | java.lang.Integer, /) -> int: ...
    def stopAnimation(self, arg1: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def stopPanning(self) -> None: ...
    def zoomIn(self) -> bool: ...
    def zoomInFixing(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> bool: ...
    def zoomOut(self) -> bool: ...
    def zoomOutFixing(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> bool: ...
    def zoomToSpan(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...

class IMapView(java.lang.Object):
    def getController(self) -> IMapController: ...
    def getLatitudeSpan(self) -> int: ...
    def getLongitudeSpan(self) -> int: ...
    def getMapCenter(self) -> IGeoPoint: ...
    def getMaxZoomLevel(self) -> int: ...
    def getProjection(self) -> IProjection: ...
    def getZoomLevel(self) -> int: ...
    def setBackgroundColor(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...

class IMyLocationOverlay(java.lang.Object):
    def disableCompass(self) -> None: ...
    def disableMyLocation(self) -> None: ...
    def enableCompass(self) -> bool: ...
    def enableMyLocation(self) -> bool: ...
    def getLastFix(self) -> android.location.Location: ...
    def getOrientation(self) -> float: ...
    def isCompassEnabled(self) -> bool: ...
    def isMyLocationEnabled(self) -> bool: ...
    def onStatusChanged(self, arg1: str | java.lang.String, arg2: int | java.jint | java.lang.Integer, arg3: android.os.Bundle, /) -> None: ...
    def runOnFirstFix(self, arg1: java.lang.Runnable, /) -> bool: ...

class IPosition(java.lang.Object):
    def getBearing(self) -> float: ...
    def getLatitude(self) -> float: ...
    def getLongitude(self) -> float: ...
    def getZoomLevel(self) -> float: ...
    def hasBearing(self) -> bool: ...
    def hasZoomLevel(self) -> bool: ...

class IProjection(java.lang.Object):
    def fromPixels(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> IGeoPoint: ...
    def getNorthEast(self) -> IGeoPoint: ...
    def getSouthWest(self) -> IGeoPoint: ...
    def metersToEquatorPixels(self, arg1: float | java.jfloat | java.lang.Float, /) -> float: ...
    def toPixels(self, arg1: IGeoPoint, arg2: android.graphics.Point, /) -> android.graphics.Point: ...

class Marker(java.lang.Object):
    anchor: Marker.Anchor = ...
    bitmap: android.graphics.Bitmap = ...
    icon: int = ...
    latitude: float = ...
    longitude: float = ...
    snippet: str = ...
    title: str = ...
    def __init__(self, aLatitude: float | java.jdouble | java.lang.Double, aLongitude: float | java.jdouble | java.lang.Double, /) -> None: ...
    def anchor(self, aAnchor: Marker.Anchor, /) -> Marker: ...
    def bitmap(self, aBitmap: android.graphics.Bitmap, /) -> Marker: ...
    def icon(self, aIcon: int | java.jint | java.lang.Integer, /) -> Marker: ...
    def snippet(self, aSnippet: str | java.lang.String, /) -> Marker: ...
    def title(self, aTitle: str | java.lang.String, /) -> Marker: ...

    class Anchor(java.lang.Enum[Marker.Anchor]):
        BOTTOM_CENTER: typing.ClassVar[Marker.Anchor] = ...
        CENTER: typing.ClassVar[Marker.Anchor] = ...
        NONE: typing.ClassVar[Marker.Anchor] = ...
        @staticmethod
        def valueOf(name: str | java.lang.String, /) -> Marker.Anchor: ...
        @staticmethod
        def values() -> java.chaquopy.JavaArray[Marker.Anchor]: ...

class OnCameraChangeListener(java.lang.Object):
    def onCameraChange(self, arg1: IPosition, /) -> None: ...

class Polyline(java.lang.Object):
    color: int = ...
    points: java.util.List[IGeoPoint] = ...
    width: float = ...
    def __init__(self) -> None: ...
    def color(self, aColor: int | java.jint | java.lang.Integer, /) -> Polyline: ...
    @typing.overload
    def points(self, aPoints: java.util.List[IGeoPoint], /) -> Polyline: ...
    @typing.overload
    def points(self, *aPoints: IGeoPoint) -> Polyline: ...
    def width(self, aWidth: float | java.jfloat | java.lang.Float, /) -> Polyline: ...
