@@ -39,9 +39,11 @@ import ru.surfstudio.android.location.location_errors_resolver.resolutions.impl.
3939 * Сервис для работы с местоположением.
4040 */
4141class LocationService (
42- context : Context ,
43- private val fusedLocationClient : FusedLocationProviderClient = LocationServices .getFusedLocationProviderClient(context)
44- ) {
42+ context : Context ,
43+ private val fusedLocationClient : FusedLocationProviderClient = LocationServices .getFusedLocationProviderClient(
44+ context
45+ )
46+ ) : ILocationService {
4547
4648 private val locationAvailability = LocationAvailability (context)
4749
@@ -56,8 +58,8 @@ class LocationService(
5658 * список из возможных исключений: [NoLocationPermissionException], [PlayServicesAreNotAvailableException],
5759 * [ResolvableApiException].
5860 */
59- fun checkLocationAvailability (priority : LocationPriority ): Completable =
60- locationAvailability.checkLocationAvailability(priority)
61+ override fun checkLocationAvailability (priority : LocationPriority ): Completable =
62+ locationAvailability.checkLocationAvailability(priority)
6163
6264 /* *
6365 * Решить проблемы связанные с невозможностью получения местоположения.
@@ -72,9 +74,9 @@ class LocationService(
7274 * передавались решения;
7375 * - onError() вызывается в случае, если попытка решения проблем не удалась. Приходит [ResolutionFailedException].
7476 */
75- fun resolveLocationAvailability (
76- throwables : List <Throwable >,
77- vararg resolutions : LocationErrorResolution <* >
77+ override fun resolveLocationAvailability (
78+ throwables : List <Throwable >,
79+ vararg resolutions : LocationErrorResolution <* >
7880 ): Single <List <Throwable >> = LocationErrorsResolver .resolve(throwables, resolutions.toList())
7981
8082 /* *
@@ -88,21 +90,21 @@ class LocationService(
8890 * [ResolvableApiException].
8991 */
9092 @RequiresPermission(
91- anyOf = [" android.permission.ACCESS_COARSE_LOCATION" , " android.permission.ACCESS_FINE_LOCATION" ]
93+ anyOf = [" android.permission.ACCESS_COARSE_LOCATION" , " android.permission.ACCESS_FINE_LOCATION" ]
9294 )
93- fun observeLastKnownLocation (): Maybe <Location > =
94- Maybe .create<Location > { maybeEmitter ->
95- fusedLocationClient
96- .lastLocation
97- .addOnSuccessListener { location ->
98- if (location == null ) {
99- maybeEmitter.onComplete()
100- } else {
101- maybeEmitter.onSuccess(location)
102- }
103- }
104- .addOnFailureListener { exception -> maybeEmitter.onError(exception) }
105- }
95+ override fun observeLastKnownLocation (): Maybe <Location > =
96+ Maybe .create<Location > { maybeEmitter ->
97+ fusedLocationClient
98+ .lastLocation
99+ .addOnSuccessListener { location ->
100+ if (location == null ) {
101+ maybeEmitter.onComplete()
102+ } else {
103+ maybeEmitter.onSuccess(location)
104+ }
105+ }
106+ .addOnFailureListener { exception -> maybeEmitter.onError(exception) }
107+ }
106108
107109 /* *
108110 * Подписаться на получение обновлений местоположения.
@@ -126,30 +128,34 @@ class LocationService(
126128 * [ResolvableApiException].
127129 */
128130 @RequiresPermission(
129- anyOf = [" android.permission.ACCESS_COARSE_LOCATION" , " android.permission.ACCESS_FINE_LOCATION" ]
131+ anyOf = [" android.permission.ACCESS_COARSE_LOCATION" , " android.permission.ACCESS_FINE_LOCATION" ]
130132 )
131- fun observeLocationUpdates (
132- intervalMillis : Long? ,
133- fastestIntervalMillis : Long? ,
134- priority : LocationPriority ?
133+ override fun observeLocationUpdates (
134+ intervalMillis : Long? ,
135+ fastestIntervalMillis : Long? ,
136+ priority : LocationPriority ?
135137 ): Observable <Location > {
136138 var locationCallback: LocationCallback ? = null
137139 return Observable
138- .create<Location > { observableEmitter ->
139- val locationRequest =
140- LocationUtil .createLocationRequest(intervalMillis, fastestIntervalMillis, priority)
141- locationCallback = createLocationCallback(observableEmitter)
142- fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null )
143- }
144- .subscribeOn(AndroidSchedulers .mainThread())
145- .doFinally { fusedLocationClient.removeLocationUpdates(locationCallback) }
140+ .create<Location > { observableEmitter ->
141+ val locationRequest =
142+ LocationUtil .createLocationRequest(
143+ intervalMillis,
144+ fastestIntervalMillis,
145+ priority
146+ )
147+ locationCallback = createLocationCallback(observableEmitter)
148+ fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null )
149+ }
150+ .subscribeOn(AndroidSchedulers .mainThread())
151+ .doFinally { fusedLocationClient.removeLocationUpdates(locationCallback) }
146152 }
147153
148154 private fun createLocationCallback (observableEmitter : ObservableEmitter <Location >): LocationCallback =
149- object : LocationCallback () {
150- override fun onLocationResult (locationResult : LocationResult ? ) {
151- val nonNullLastLocation = locationResult?.lastLocation ? : return
152- observableEmitter.onNext(nonNullLastLocation)
153- }
155+ object : LocationCallback () {
156+ override fun onLocationResult (locationResult : LocationResult ? ) {
157+ val nonNullLastLocation = locationResult?.lastLocation ? : return
158+ observableEmitter.onNext(nonNullLastLocation)
154159 }
160+ }
155161}
0 commit comments