Как правильно организовать передачу данных о местоположении в чистой архитектуре в Android? - PullRequest
0 голосов
/ 22 января 2020

Я использую FusedLocationClient, который помещен в LocationProvider

class LocationProvider @Inject constructor(val fusedLocationClient: FusedLocationProviderClient) {

private lateinit var locationRequest: LocationRequest
lateinit var locationCallback: LocationCallback

var coord: Coord? = null


fun getLocation(): Coord?{
    locationRequest = LocationRequest()
    locationRequest.interval = 10000
    locationRequest.fastestInterval = 5000
    locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
    locationCallback = object : LocationCallback() {
        override fun onLocationResult(locationResult: LocationResult?) {
            if (locationResult == null) {
                return
            }
            for (location in locationResult.locations) {
                location?.run {
                    fusedLocationClient.removeLocationUpdates(locationCallback)
                    coord = Coord(lat = latitude, lon = longitude)
                }
            }
        }
    }
    return coord
}

}, и у меня есть репозиторий

class Repository(private val locationProvider: LocationProvider) {

fun getCoords(): Coord?{
    return locationProvider.getLocation()
}

}

Проблема в том, что я не могу получить местоположение из хранилища напрямую. Вместо этого хранилище должно быть подписано на LocationCallback в LocationProvider, а хранилище должно знать о Presenter. Так что это приводит к круговым зависимостям. Кто-нибудь решал эту проблему?

...