package Ġorg . step ic . d roid . core Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġcom . google . android . gms . tasks . Tasks Ċ import Ġcom . google . firebase . messaging . Firebase Messaging Ċ import Ġorg . step ic . d roid . an alytic . An alytic Ċ import Ġorg . step ic . d roid . di . App Singleton Ċ import Ġorg . step ic . d roid . preferences . Shared Preference Helper Ċ import Ġorg . step ic . d roid . util . DeviceInfo Util Ċ import Ġorg . step ik . android . domain . device . repository . Device Repository Ċ import Ġorg . step ik . android . remote . device . model . Device Request Ċ import Ġretrofit 2 . HttpException Ċ import Ġjavax . inject . Inject Ċ Ċ @ App Singleton Ċ class ĠSte pi k Device Post er Impl Ċ @ Inject Ċ constructor ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġfirebase Messaging : ĠFirebase Messaging , ĊĠĠĠ Ġprivate Ġval Ġdevice Repository : ĠDevice Repository , ĊĠĠĠ Ġprivate Ġval Ġshared Preferences Helper : ĠShared Preference Helper , ĊĠĠĠ Ġprivate Ġval Ġan alytic : ĠAn alytic Ċ ) Ġ: ĠSte pi k Device Post er Ġ{ ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġoverride Ġfun Ġregister Device () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠTasks . await ( firebase Messaging . token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences Helper . auth Response From Store !! Ġ// for Ġlogged Ġuser Ġonly Ġwork ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Repository . register Device ( create Device Request ( token )). blocking Await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . code () Ġ== Ġ 4 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenew Device Registration ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" response Ġwas Ġfailed . Ġit Ġis Ġok .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences Helper . setIs G cm Token Ok ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġan alytic . report Event ( An alytic . Notification . TOKEN _ UPDATED ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġan alytic . report Event ( An alytic . Notification . TOKEN _ UPDATE _ FAILED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġan alytic . report Error ( An alytic . Notification . TOKEN _ UPDATE _ FAILED , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences Helper . setIs G cm Token Ok ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrenew Device Registration ( token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdeviceId Ġ= Ġdevice Repository . get Devices By Registration Id ( token ). blocking Get (). first OrNull ()?. id ĊĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Repository . renew Device Registration ( deviceId , Ġcreate Device Request ( token )). blocking Await () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Can 't Ġget Ġdevice Ġid Ġfor Ġtoken : Ġ$ token ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Device Request ( token : ĠString ): ĠDevice Request Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= ĠDevice Info Util . get Short Info ( context ) ĊĠĠĠĠĠĠĠ Ġreturn ĠDevice Request ( token Ġ= Ġtoken , Ġdescription Ġ= Ġdescription ) ĊĠĠĠ Ġ} Ċ } Ċ