Правильное использование Google API (навигация) в чистой архитектуре AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Правильное использование Google API (навигация) в чистой архитектуре Android

Сообщение Anonymous »

У меня вопрос относительно использования API Google (в моем случае NavigationAPI) в чистой архитектуре.
Поэтому для использования навигации Google необходимо иметь объект Navigator из NavigationApi. getNavigator API.
Изначально я думал, что можно разместить всю необходимую реализацию на уровне ДАННЫХ, однако этот уровень должен только хранить и предоставлять доступ к данным (локальным, удаленным). Но тогда Navigator сильно зависит от SupportNavigationFragment, который находится на уровне представления. Как мы знаем, нижние уровни не должны зависеть от более высоких.
Поэтому я подумал, что всю упомянутую реализацию следует перенести во фрагмент, но я не уверен на 100%, правильно ли это. даже если это звучит разумно. Есть ли у кого-нибудь опыт работы с Google API в чистой арке?
Функциональность, которая мне нужна:
private var navigator: Navigator? = null

override fun initializeNavigator(activity: FragmentActivity) {
NavigationApi.getNavigator(activity, object : NavigationApi.NavigatorListener {
override fun onNavigatorReady(navigator: Navigator?) {
navigator = navigator
addListeners()
}

override fun onError(errorCode: Int) {
handleError(errorCode)
}
})
}

override fun startNavigation() {
navigator?.setAudioGuidance(Navigator.AudioGuidance.VOICE_ALERTS_AND_GUIDANCE)
navigator?.startGuidance()
}

override fun stopNavigation() {
navigator?.stopGuidance()
navigator?.clearDestinations()
}

override fun getRouteSummary(waypoint: Waypoint, options: RoutingOptions) = callbackFlow {
navigator?.let { navigator ->
val pendingRoute = navigator.setDestination(waypoint, options)
pendingRoute.setOnResultListener { code ->
_navigationStateFlow.value = NavigationState.SUMMARY
val result = trySend(
NavigationSummary(
response = code,
meters = navigator.currentTimeAndDistance.meters,
seconds = navigator.currentTimeAndDistance.seconds
)
)
}

awaitClose {

}
}
}

private fun addListeners() {
val arrivalListener = Navigator.ArrivalListener {
navigator?.clearDestinations()
}
navigator?.addArrivalListener(arrivalListener)

val routeChangedListener = Navigator.RouteChangedListener {

}
navigator?.addRouteChangedListener(routeChangedListener)
}

private fun handleError(errorCode: Int) {
when (errorCode) {
NavigationApi.ErrorCode.NOT_AUTHORIZED -> {

}

NavigationApi.ErrorCode.TERMS_NOT_ACCEPTED -> {
...
}

NavigationApi.ErrorCode.NETWORK_ERROR -> {

}

NavigationApi.ErrorCode.LOCATION_PERMISSION_MISSING -> {

}

else -> {
...
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... chitecture
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Правильное место для сопоставления домена в чистой архитектуре Android
    Anonymous » » в форуме Android
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Правильное место для сопоставления домена в чистой архитектуре Android
    Anonymous » » в форуме Android
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Использование нескольких EF Core DbContexts в одном приложении в чистой архитектуре
    Anonymous » » в форуме C#
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между mvvm с чистой архитектурой и mvvm без чистой архитектуры в Android?
    Anonymous » » в форуме Android
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Где реализовать шифрование токена доступа в чистой архитектуре Android?
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»