package Ġcom . push er . chat kit Ċ Ċ import Ġcom . push er . platform . token Provider . Token Provider Ċ import Ġcom . push er . util . Result Ċ import Ġelements . Error Ċ import Ġjava . util . concurrent . Future Ċ Ċ /** Ċ Ġ* ĠUsed Ġto Ġavoid Ġmultiple Ġrequests Ġto Ġthe Ġtoken Provider Ġif Ġone Ġis Ġpending Ċ Ġ*/ Ċ internal Ġclass ĠDe bounce Token Provider ( private Ġval Ġoriginal : ĠToken Provider ) Ġ: ĠToken Provider Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġpending : ĠFuture < Result < String , ĠError >> ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġfetch Token ( token Params : ĠAny ?): ĠFuture < Result < String , ĠError >> Ġ= Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitial Pending Snapshot Ġ= Ġpending ĊĠĠĠĠĠĠĠ Ġif Ġ( initial Pending Snapshot Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( initial Pending Snapshot . is Done Ġ|| Ġinitial Pending Snapshot . is Cancelled )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpending Ġ?: Ġoriginal . fetch Token ( token Params ). also Ġ{ Ġpending Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Token ( token : ĠString ?) Ġ= Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoriginal . clear Token ( token ) ĊĠĠĠĠĠĠĠ Ġpending Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ