@startuml
!theme plain
!define LANDSCAPE
!define LAYOUT_AS_SKETCH
skinparam classAttributeIconSize 0
skinparam direction left to right
skinparam classFontSize 16
skinparam classBackgroundColor white
skinparam classBorderColor black
skinparam classArrowColor black
skinparam classFontColor black
skinparam backgroundColor white
skinparam shadowing false
skinparam ranksep 400
skinparam nodesep 60
skinparam linetype ortho
skinparam classPadding 10
skinparam classMargin 15
skinparam classMinWidth 120
skinparam classMinHeight 200
skinparam classMaxWidth 250
skinparam classMaxHeight 400
skinparam classBorderThickness 2
skinparam classArrowThickness 1
skinparam classArrowHeadSize 10
skinparam classArrowTailSize 10
skinparam classArrowFontSize 10
skinparam classArrowFontStyle normal

class NMEAParser
class TestAISDecoding
class ExampleUnitTest
class ExampleInstrumentedTest
class AisTargetsAdapter
class MainActivity
class SettingsActivity
class AisTargetsActivity
class AppDatabase
class Repository
class AISVesselMapper
class VesselEntity
class AISVesselEntity
interface AISVesselDao
interface VesselDao
class CompassSensor
class UDPListener
class MapController
class NetworkController
class CompassController
class VesselPathController
class DataController
class DefaultControllersFactory
class NMEAParser
class NotificationController
class GPSLocationListener
class NMEAController
class AppCoordinator
class AndroidNMEAListener
interface ControllersFactory
class MenuBinder
class PermissionsBinder
interface UIDataChangeNotifier
class BottomSheetsBinder
class BottomSheetsManager
class UIRenderingCoordinator
interface MapInterface
class YandexMarkerWrapper
interface MapInterfaceChangeListener
class MapLibreMapImpl
class MarkerWrapper
class MapForgeImpl
interface MarkerManager
class YandexMarkerManager
class VesselPathTracker
class YandexMapImpl
class NotificationService
class AISForegroundService
class GeoUtils
class MIDToCountry
class NavigationUtils
class LogSender
class SettingsManager
class CoordinatesDockWidget
class BaseDockWidget
class CompassView
class CursorOverlay
class AISVessel
class Vessel
class VesselPathPoint

AisTargetsActivity ..|> AisTargetsAdapter
AisTargetsActivity o-- "1" AisTargetsAdapter : adapter
AisTargetsActivity o-- "1" Repository : repository
AisTargetsAdapter --|> AISVesselEntity
AppCoordinator ..|> NMEAController
AppCoordinator o-- "1" CompassController : compassController
AppCoordinator o-- "1" DataController : dataController
AppCoordinator o-- "1" MapController : mapController
AppCoordinator o-- "1" NMEAController : nmeaController
AppCoordinator o-- "1" NetworkController : networkController
AppCoordinator o-- "1" NotificationController : notificationController
AppCoordinator o-- "1" SettingsManager : settingsManager
AppCoordinator o-- "1" UIDataChangeNotifier : uiDataNotifier
AppCoordinator o-- "1" Vessel : ownVessel
AppCoordinator o-- "1" VesselPathController : pathController
BottomSheetsBinder o-- "1" AISVessel : currentAISVessel
BottomSheetsManager o-- "1" AISVessel : currentAISVessel
BottomSheetsManager o-- "1" AppCoordinator : appCoordinator
CompassController ..|> CompassSensor
CompassController o-- "1" CompassSensor : compassSensor
CompassView --|> BaseDockWidget
CompassView o-- "0..*" AISVessel : nearbyVessels
CompassView o-- "1" Vessel : ourVessel
CoordinatesDockWidget --|> BaseDockWidget
CoordinatesDockWidget o-- "1" Vessel : vessel
CursorOverlay o-- "1" AISVessel : currentAisVessel
CursorOverlay o-- "1" Vessel : ownVessel
DataController o-- "1" Repository : repository
DataController o-- "1" SettingsManager : settingsManager
DefaultControllersFactory ..|> ControllersFactory
MainActivity o-- "1" AppCoordinator : appCoordinator
MainActivity o-- "1" BottomSheetsBinder : bottomSheetsBinder
MainActivity o-- "1" BottomSheetsManager : bottomSheetsManager
MainActivity o-- "1" CompassController : compassController
MainActivity o-- "1" CompassView : compassView
MainActivity o-- "1" CoordinatesDockWidget : coordinatesWidget
MainActivity o-- "1" MapController : mapController
MainActivity o-- "1" MenuBinder : menuBinder
MainActivity o-- "1" PermissionsBinder : permissionsBinder
MainActivity o-- "1" SettingsManager : settingsManager
MainActivity o-- "1" UIRenderingCoordinator : uiCoordinator
MainActivity o-- "1" Vessel : lastCompassVessel
MainActivity o-- "1" Vessel : lastCoordinatesVessel
MapController o-- "0..*" MapInterfaceChangeListener : listeners
MapController o-- "1" MapInterface : currentMapInterface
MapController o-- "1" MarkerManager : markerManager
MapForgeImpl ..|> MapInterface
MapForgeImpl o-- "1" CursorOverlay : cursorOverlay
MapForgeImpl o-- "1" Vessel : ownVessel
MapLibreMapImpl ..|> MapInterface
MapLibreMapImpl o-- "1" AppCoordinator : appCoordinator
MapLibreMapImpl o-- "1" CursorOverlay : cursorOverlay
MapLibreMapImpl o-- "1" SettingsManager : settingsManager
MapLibreMapImpl o-- "1" Vessel : lastOwnVessel
MapLibreMapImpl o-- "1" Vessel : ownVessel
MapLibreMapImpl o-- "1" Vessel : pendingVesselUpdate
MapLibreMapImpl o-- "1" VesselPathController : pathController
MenuBinder o-- "1" AppCoordinator : appCoordinator
MenuBinder o-- "1" SettingsManager : settingsManager
NMEAController ..|> NMEAParser
NMEAController o-- "1" AndroidNMEAListener : androidNmeaListener
NMEAController o-- "1" GPSLocationListener : gpsLocationListener
NMEAController o-- "1" NMEAParser : nmeaParser
NMEAParser o-- "0..*" AISVessel : aisVessels
NMEAParser o-- "1" GPSLocationListener : gpsLocationListener
NMEAParser o-- "1" Vessel : ownVessel
NetworkController ..|> UDPListener
NetworkController o-- "1" UDPListener : udpListener
NotificationController o-- "1" NotificationService : notificationService
NotificationService o-- "1" SettingsManager : settingsManager
Repository o-- "1" AISVesselDao : aisVesselDao
Repository o-- "1" VesselDao : vesselDao
SettingsActivity o-- "1" SettingsManager : settingsManager
UIRenderingCoordinator ..|> MapInterfaceChangeListener
UIRenderingCoordinator ..|> UIDataChangeNotifier
UIRenderingCoordinator o-- "1" MapInterface : mapInterface
UIRenderingCoordinator o-- "1" Vessel : pendingVesselUpdate
VesselPathController o-- "0..*" VesselPathPoint : pathPoints
VesselPathController o-- "1" SettingsManager : settingsManager
VesselPathController o-- "1" VesselPathPoint : lastPoint
YandexMapImpl ..|> MapInterface
YandexMapImpl o-- "1" CursorOverlay : cursorOverlay
YandexMapImpl o-- "1" Vessel : ownVessel
YandexMapImpl o-- "1" YandexMarkerManager : markerManager
YandexMarkerManager ..|> MarkerManager
YandexMarkerManager o-- "1" VesselPathTracker : ownVesselPathTracker
YandexMarkerManager o-- "1" YandexMarkerWrapper : ownVesselMarker
YandexMarkerWrapper --|> MarkerWrapper
YandexMarkerWrapper o-- "1" AISVessel : aisVessel
YandexMarkerWrapper o-- "1" Vessel : vessel
@enduml