/* ĠCopyright Ġ 2 0 2 2 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . google . map spl atform . transport ation . sample . kotlin consumer Ċ Ċ import Ġandroid . app . Application Ċ import Ġcom . google . android . libraries . map spl atform . transport ation . consumer . auth . AuthToken Context Ċ import Ġcom . google . android . libraries . map spl atform . transport ation . consumer . auth . AuthToken Factory Ċ import Ġcom . google . map spl atform . transport ation . sample . kotlin consumer . provider . Provider Utils Ċ import Ġcom . google . map spl atform . transport ation . sample . kotlin consumer . provider . response . Token Response Ċ import Ġcom . google . map spl atform . transport ation . sample . kotlin consumer . provider . service . Local Provider Service Ċ import Ġjava . util . concurrent . ExecutionException Ċ import Ġjava . util . concurrent . Executors Ċ Ċ /** ĠA Ġfactory Ġfor Ġreturning Ġauth Ġtokens Ġfor Ġthe Ġcurrently Ġassigned Ġtrip Ġ*/ Ċ internal Ġclass ĠTrip AuthToken Factory ( application : ĠApplication ) Ġ: ĠAuth Token Factory Ġ{ ĊĠ Ġprivate Ġvar Ġtoken : ĠString ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġexpiry Time Ms : ĠLong Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġtrip Id : ĠString ? Ġ= Ġnull ĊĠ Ġprivate Ġval Ġprovider Service : ĠLocal Provider Service ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġexecutor Ġ= ĠExec utors . new Cached ThreadPool () ĊĠĠĠ Ġval Ġscheduled Executor Ġ= ĠExec utors . new Single Thread Scheduled Executor () ĊĠĠĠ Ġprovider Service Ġ= ĊĠĠĠĠĠ ĠLocal Provider Service ( ĊĠĠĠĠĠĠĠ ĠLocal Provider Service . create Rest Provider ( Provider Utils . get Provider BaseUrl ( application )), ĊĠĠĠĠĠĠĠ Ġexecutor , ĊĠĠĠĠĠĠĠ Ġscheduled Executor ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetToken ( context : ĠAuth Token Context ): ĠString Ġ{ ĊĠĠĠ Ġval Ġtrip Id Ġ= Ġcontext . trip Id !! ĊĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ> Ġexpiry Time Ms Ġ|| Ġtrip Id Ġ!= Ġthis . trip Id ) Ġ{ ĊĠĠĠĠĠ Ġfetch New Token ( trip Id ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtoken !! ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġfetch New Token ( trip Id : ĠString ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġtoken Response : ĠToken Response Ġ= Ġprovider Service . fetch AuthToken ( trip Id ). get () ĊĠĠĠĠĠ Ġtoken Ġ= Ġtoken Response . token !! ĊĊĠĠĠĠĠ Ġ// ĠThe Ġexpiry Ġtime Ġcould Ġbe Ġan Ġhour Ġfrom Ġnow , Ġbut Ġjust Ġto Ġtry Ġand Ġavoid ĊĠĠĠĠĠ Ġ// Ġpassing Ġexpired Ġtokens , Ġwe Ġsubtract Ġ 1 0 Ġminutes Ġfrom Ġthat Ġtime . ĊĠĠĠĠĠ Ġval Ġten Minutes In Millis Ġ= Ġ( 1 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 ). to Long () ĊĠĠĠĠĠ Ġexpiry Time Ms Ġ= Ġtoken Response . expiration Timestamp . millis Ġ- Ġten Minutes In Millis ĊĠĠĠĠĠ Ġthis . trip Id Ġ= Ġtrip Id ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠRuntimeException (" Could Ġnot Ġget Ġauth Ġtoken ", Ġe ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠRuntimeException (" Could Ġnot Ġget Ġauth Ġtoken ", Ġe ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ