package Ġio . heck el . nt fy . msg Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . util . Base 6 4 Ċ import Ġio . heck el . nt fy . R Ċ import Ġio . heck el . nt fy . db . Notification Ċ import Ġio . heck el . nt fy . db . Repository Ċ import Ġio . heck el . nt fy . db . Subscription Ċ import Ġio . heck el . nt fy . util .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠThe Ġbroadcast Ġservice Ġis Ġresponsible Ġfor Ġsending Ġand Ġreceiving Ġbroadcast Ġintent s Ċ Ġ* Ġin Ġorder Ġto Ġfacilitate Ġtasks Ġapp Ġintegr ations . Ċ Ġ*/ Ċ class ĠBroadcast Service ( private Ġval Ġctx : ĠContext ) Ġ{ ĊĠĠĠ Ġfun Ġsend ( subscription : ĠSubscription , Ġnotification : ĠNotification , Ġmut ed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠMESSAGE _ RECE IVED _ ACTION ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" id ", Ġnotification . id ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" base _ url ", Ġsubscription . baseUrl ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" topic ", Ġsubscription . topic ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" time ", Ġnotification . timestamp . toInt ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" title ", Ġnotification . title ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" message ", Ġdecode Message ( notification )) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" message _ bytes ", Ġdecode Bytes Message ( notification )) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" message _ encoding ", Ġnotification . encoding ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" tags ", Ġnotification . tags ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" tags _ map ", Ġjoin Tags Map ( split Tags ( notification . tags ))) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" priority ", Ġnotification . priority ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" muted ", Ġmut ed ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" muted _ str ", Ġmut ed . toString ()) ĊĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Sending Ġintent Ġbroadcast : Ġ$ intent ") ĊĠĠĠĠĠĠĠ Ġctx . send Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġreceiver Ġis Ġtriggered Ġwhen Ġthe ĠS END _ MESSAGE Ġintent Ġis Ġreceived . ĊĠĠĠĠ Ġ* ĠSee ĠAndroid Manifest . xml Ġfor Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠBroadcast Receiver Ġ: Ġandroid . content . Broadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Broadcast Ġreceived : Ġ$ intent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( intent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMESSAGE _ SEND _ ACTION Ġ-> Ġsend ( context , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsend ( ctx : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapi Ġ= ĠApi Service () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbaseUrl Ġ= ĠgetString Extra ( intent , Ġ" base _ url ") Ġ?: Ġctx . getString ( R . string . app _ base _ url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtopic Ġ= ĠgetString Extra ( intent , Ġ" topic ") Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠgetString Extra ( intent , Ġ" message ") Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠgetString Extra ( intent , Ġ" title ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags Ġ= ĠgetString Extra ( intent ," tags ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpriority Ġ= Ġwhen Ġ( getString Extra ( intent , Ġ" priority ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" min ", Ġ" 1 " Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" low ", Ġ" 2 " Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" default ", Ġ" 3 " Ġ-> Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" high ", Ġ" 4 " Ġ-> Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ur gent ", Ġ" max ", Ġ" 5 " Ġ-> Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ġ= ĠgetString Extra ( intent ," delay ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository . getInstance ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġrepository . getUser ( baseUrl ) Ġ// ĠMay Ġbe Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Publishing Ġmessage Ġ$ intent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi . publish ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= ĠbaseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtopic Ġ= Ġtopic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= Ġpriority , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġsplit Tags ( tags ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Ġ= Ġdelay ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Unable Ġto Ġpublish Ġmessage : Ġ${ e . message }", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġan Ġextra Ġas Ġa ĠString Ġvalue , Ġeven Ġif Ġthe Ġextra Ġmay Ġbe Ġan Ġint Ġor Ġa Ġlong . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetString Extra ( intent : ĠIntent , Ġname : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . getString Extra ( name ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent . getString Extra ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( intent . getInt Extra ( name , ĠDO ES _ NOT _ EXIST ) Ġ!= ĠDO ES _ NOT _ EXIST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent . getInt Extra ( name , ĠDO ES _ NOT _ EXIST ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( intent . getLong Extra ( name , ĠDO ES _ NOT _ EXIST . to Long ()) Ġ!= ĠDO ES _ NOT _ EXIST . to Long ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent . getLong Extra ( name , ĠDO ES _ NOT _ EXIST . to Long ()). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" N tf y Broadcast Service " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDO ES _ NOT _ EXIST Ġ= Ġ- 2 5 8 6 0 0 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠThese Ġconstants Ġcannot Ġbe Ġchanged Ġwithout Ġbreaking Ġthe Ġcontract ; Ġalso Ġsee Ġmanifest ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMESSAGE _ RECE IVED _ ACTION Ġ= Ġ" io . heck el . nt fy . MESSAGE _ RECE IVED " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMESSAGE _ SEND _ ACTION Ġ= Ġ" io . heck el . nt fy . SEND _ MESSAGE " ĊĠĠĠ Ġ} Ċ } Ċ