package Ġcom . sur rus . gal way bus . di . k oin Ċ Ċ import Ġandroidx . room . Room Ċ import Ġandroid . content . Context Ċ import Ġcom . google . firebase . analytics . Firebase Analytics Ċ import Ġcom . google . gson . Field Naming Policy Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . jak ew h art on . ret rofit 2 . adapter . kotlin . coroutines . Coroutine Call Adapter Factory Ċ import Ġcom . sur rus . gal way bus . cache . Gal way Bus Cache Impl Ċ import Ġcom . sur rus . gal way bus . cache . Preferences Helper Ċ import Ġcom . sur rus . gal way bus . cache . db . Gal way Bus Database Ċ import Ġcom . sur rus . gal way bus . data . Gal way Bus Data Repository Ċ import Ġcom . sur rus . gal way bus . data . repository . Gal way Bus Cache Ċ import Ġcom . sur rus . gal way bus . data . repository . Gal way Bus DataStore Ċ import Ġcom . sur rus . gal way bus . data . repository . Gal way Bus Remote Ċ import Ġcom . sur rus . gal way bus . data . source . Gal way Bus Cache DataStore Ċ import Ġcom . sur rus . gal way bus . data . source . Gal way Bus DataStore Factory Ċ import Ġcom . sur rus . gal way bus . data . source . Gal way Bus Remote DataStore Ċ import Ġcom . sur rus . gal way bus . di . k oin . Datasource Properties . SERVER _ URL Ċ import Ġcom . sur rus . gal way bus . domain . inter actor . Get Bus Info UseCase Ċ import Ġcom . sur rus . gal way bus . domain . inter actor . Get Bus Routes UseCase Ċ import Ġcom . sur rus . gal way bus . domain . inter actor . Get Bus Stops UseCase Ċ import Ġcom . sur rus . gal way bus . domain . inter actor . Get Depart ures UseCase Ċ import Ġcom . sur rus . gal way bus . domain . inter actor . Get Nearest Bus Stops UseCase Ċ import Ġcom . sur rus . gal way bus . domain . repository . Gal way Bus Repository Ċ import Ġcom . sur rus . gal way bus . remote . Gal way Bus Remote Impl Ċ import Ġcom . sur rus . gal way bus . remote . Gal way Bus Service Ċ import Ġcom . sur rus . gal way bus . ui . view model . Bus Routes ViewModel Ċ import Ġcom . sur rus . gal way bus . ui . view model . Bus Stops ViewModel Ċ import Ġcom . sur rus . gal way bus . ui . view model . Bus Info ViewModel Ċ import Ġcom . sur rus . gal way bus . ui . view model . Nearest Bus Stops ViewModel Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġorg . k oin . android . ext . k oin . android Context Ċ import Ġorg . k oin . android . view model . dsl . viewModel Ċ import Ġorg . k oin . dsl . module Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ object ĠDat as ource Properties Ġ{ ĊĠĠĠ Ġconst Ġval ĠSERVER _ URL Ġ= Ġ" https :// gal way bus . herokuapp . com /" ĊĠĠĠ Ġ// const Ġval ĠSERVER _ URL Ġ= Ġ" https :// api . gal way bus ab u . com /" Ċ } ĊĊ Ċ val Ġgal way Bus App Mod u ile Ġ= Ġmodule Ġ{ ĊĊĠĠĠ ĠviewModel Ġ{ ĠNe arest Bus Stops ViewModel ( get ()) Ġ} ĊĠĠĠ ĠviewModel Ġ{ ĠBus Routes ViewModel ( get ()) Ġ} ĊĠĠĠ ĠviewModel Ġ{ ĠBus Stops ViewModel ( get ()) Ġ} ĊĠĠĠ ĠviewModel Ġ{ ĠBus Info ViewModel ( get ()) Ġ} ĊĊĠĠĠ Ġsingle Ġ{ ĠPreferences Helper ( get ()) Ġ} ĊĊĠĠĠ Ġsingle Ġ{ ĠGet Nearest Bus Stops UseCase ( get ()) Ġ Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠGet Bus Stops UseCase ( get ()) Ġ Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠGet Depart ures UseCase ( get ()) Ġ Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠGet Bus Routes UseCase ( get ()) Ġ Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠGet Bus Info UseCase ( get ()) Ġ Ġ} ĊĊĠĠĠ Ġsingle Ġ{ ĠGal way Bus Data Repository ( get ()) Ġas ĠGal way Bus Repository Ġ} ĊĊĠĠĠ Ġsingle Ġ{ ĠGal way Bus DataStore Factory ( get (), Ġget (), Ġget ()) Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠGal way Bus Remote DataStore ( get ()) Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠGal way Bus Cache DataStore ( get ()) Ġ} ĊĊĠĠĠ Ġsingle Ġ{ ĠGal way Bus Cache Impl ( get (), Ġget ()) Ġas ĠGal way Bus Cache Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠGal way Bus Remote DataStore ( get ()) Ġas ĠGal way Bus DataStore Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠGal way Bus Remote Impl ( get ()) Ġas ĠGal way Bus Remote Ġ} ĊĠĠĠ Ġsingle Ġ{ Ġcreate Gal way Bus Database ( android Context ()) Ġ} ĊĊĠĠĠ Ġsingle Ġ{ Ġcreate Firebase Analytics ( get ()) Ġ} Ċ } ĊĊ Ċ val Ġremote Datasource Module Ġ= Ġmodule Ġ{ ĊĊĠĠĠ Ġsingle Ġ{ Ġcreate Ok HttpClient () Ġ} ĊĠĠĠ Ġsingle Ġ{ Ġcreate WebService < Gal way Bus Service >( get (), ĠSERVER _ URL ) Ġ} Ċ } ĊĊ Ċ fun Ġcreate Ok HttpClient (): ĠOk HttpClient Ġ{ ĊĠĠĠ Ġval Ġinterceptor Ġ= ĠHttp Logging Interceptor () ĊĠĠĠ Ġinterceptor . level Ġ= ĠHttp Logging Interceptor . Level . BODY Ċ Ċ // ĠĠĠ Ġval Ġcache Dir Ġ= ĠFile ( application . cacheDir , ĠUUID . randomUUID (). toString ()) Ċ // ĠĠĠ Ġ// Ġ 1 0 MB Ġcache Ċ // ĠĠĠ Ġval Ġcache Ġ= ĠCache ( cacheDir , Ġ 1 0 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 ) ĊĊĠĠĠ Ġreturn ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// . cache ( cache ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( 3 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Timeout ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( interceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// . add Network Interceptor ( ĠSte tho Interceptor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT > Ġcreate WebService ( ok HttpClient : ĠOk HttpClient , Ġurl : ĠString ): ĠT Ġ{ ĊĠĠĠ Ġval Ġgson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setField Naming Policy ( Field Naming Policy . LOWER _ CASE _ WITH _ UNDER SCO RES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set DateFormat (" yyyy - MM - dd ' T ' HH : mm : ss . SS SZ ZZ ZZ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠ Ġval Ġretrofit Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( SERVER _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ( gson )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Coroutine Call Adapter Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġreturn Ġretrofit . create ( T :: class . java ) Ċ Ċ } Ċ Ċ internal Ġfun Ġcreate Gal way Bus Database ( context : ĠContext ): ĠGal way Bus Database Ġ{ ĊĠĠĠ Ġreturn ĠRoom . database Builder ( context , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGal way Bus Database :: class . java , Ġ" gal way _ bus . db ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fallback To Dest ruct ive Migration () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ } Ċ Ċ internal Ġfun Ġcreate Firebase Analytics ( context : ĠContext ): ĠFirebase Analytics Ġ{ ĊĠĠĠ Ġreturn ĠFirebase Analytics . getInstance ( context ) Ċ } ĊĊ Ċ // ĠG ather Ġall Ġapp Ġmodules Ċ val Ġapp Module Ġ= ĠlistOf ( gal way Bus App Mod u ile , Ġremote Datasource Module )