package Ġbg . dab ul g aria . t ib ro ish . presentation . push Ċ Ċ import Ġbg . dab ul g aria . t ib ro ish . domain . organisation . IT iB ro ish Remote Repository Ċ import Ġbg . dab ul g aria . t ib ro ish . domain . providers . I Logger Ċ import Ġbg . dab ul g aria . t ib ro ish . domain . push . Send Token Request Ċ import Ġbg . dab ul g aria . t ib ro ish . infrastructure . schedul ers . IS chedulers Provider Ċ import Ġbg . dab ul g aria . t ib ro ish . persistence . local . Auth Repository Ċ import Ġcom . google . firebase . messaging . Firebase Messaging Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġjavax . inject . Inject Ċ Ċ interface ĠIP ush Token Sender Ġ{ ĊĊĠĠĠ Ġfun Ġinit Push Token () ĊĊĠĠĠ Ġfun Ġsend Push Token () ĊĊĠĠĠ Ġfun Ġsend Push Token ( new Token : ĠString ) Ċ } Ċ Ċ class ĠPush Token Sender Ġ@ Inject Ġconstructor ( private Ġval Ġs chedulers Provider : ĠIS chedulers Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger : ĠILogger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġauth Repository : ĠAuth Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġti Bro ish Remote Repo : ĠIT iB ro ish Remote Repository Ġ): ĠIP ush Token Sender Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinit Push Token () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠFirebase Messaging . getInstance (). token . add On Complete Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! it . is Successful ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ( TAG ," Fetching ĠF CM Ġregistration Ġtoken Ġfailed ", Ġit . exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add On Complete Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf cm Token Ġ= Ġit . result ?: "" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO ĠRemove Ġfor Ġproduction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . i ( TAG , Ġ" F CM Ġpush Ġtoken : Ġ$ fc m Token ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . from Callable Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Token Ġ= Ġauth Repository . fc m Push Token ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( old Token Ġ== Ġnull Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Repository . fc m Push Token Ġ= Ġf cm Token ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend F CM Token () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ from Callable Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers Provider . io Scheduler ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . i ( TAG ," fc m Token Ġsaved .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ( TAG ," fc m Token Ġsave ĠFAILED ", Ġthrowable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend Push Token ( new Token : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġauth Repository . fc m Push Token Ġ= Ġnew Token ĊĠĠĠĠĠĠĠ Ġsend Push Token () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend Push Token () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠSingle . from Callable Ġ{ Ġsend F CM Token () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers Provider . io Scheduler ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . i ( TAG ," send F CM Token () Ġsuccess . Ġ${ it }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ( TAG ," send F CM Token () ĠFAILED ", Ġthrowable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend F CM Token (): Int { ĊĊĠĠĠĠĠĠĠ Ġval Ġf cm Token Ġ= Ġauth Repository . fc m Push Token ĊĠĠĠĠĠĠĠ Ġval Ġuser Token Ġ= Ġauth Repository . token ĊĊĠĠĠĠĠĠĠ Ġif ( fc m Token . isNull OrEmpty () Ġ|| Ġuser Token . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġti Bro ish Remote Repo . send F CM Token ( Send Token Request ( fc m Token )) ĊĊĠĠĠĠĠĠĠ Ġlogger . i ( TAG ," send F CM Token (): I Ġsuccess . Ġ${ response . data }") ĊĠĠĠĠĠĠĠ Ġauth Repository . fc m Push Token Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġval ĠTAG : ĠString Ġ= ĠPush Token Sender :: class . java . simple Name ĊĠĠĠ Ġ} Ċ }