package Ġme . pit ok . firebase Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . media . Ring tone Manager Ċ import Ġandroid . os . Build Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . net . to Uri Ċ import Ġcom . google . firebase . messaging . Firebase Messaging Service Ċ import Ġcom . google . firebase . messaging . Remote Message Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġme . pit ok . coroutines . Dispatcher Ċ import Ġme . pit ok . datasource . Readable Ċ import Ġme . pit ok . firebase . di . builder . F cm Component Builder Ċ import Ġme . pit ok . firebase . repository . F cm Token Refresh able Ċ import Ġme . pit ok . options . entities . Not ifs Count Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ @ Suppress Lint (" Missing Firebase Instance Token Refresh ") Ċ class ĠF cm Service Ġ: ĠFirebase Messaging Service () Ġ{ ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġf cm Token Refresh er : ĠF cm Token Refresh able ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġdispatcher : ĠDispatcher ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġnotification Settings Reader Ġ: ĠRead able < Not ifs Count > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠF cm Component Builder . getComponent (). inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ KEY Ġ= Ġ" type " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOT IFY _ TYPE _ VALUE Ġ= Ġ" notification " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOT IFICATION _ CHANNEL _ ID _ KEY Ġ= Ġ" notification _ channel _ id " ĊĊĠĠĠĠĠĠĠ Ġ// shift Ġto Ġright Ġbit Count ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLONG _ US HR Ġ= Ġ 3 2 ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Message Received ( remote Message : ĠRemote Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Message Received ( remote Message ) ĊĠĠĠĠĠĠĠ Ġif Ġ( remote Message . data [ TYPE _ KEY ] Ġ== ĠNOT IFY _ TYPE _ VALUE ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Notification ( remote Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Notification ( remote Message : ĠRemote Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnot if Count Ġ= Ġnotification Settings Reader . read () ĊĠĠĠĠĠĠĠ Ġval Ġhour Ġ= ĠCalendar . getInstance (). get ( Calendar . HOUR ) ĊĠĠĠĠĠĠĠ Ġwhen ( notif Count ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNot ifs Count . None Ġ-> Ġ{ return } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNot ifs Count . Every 1 2 Hours Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hour Ġ% Ġ 1 2 Ġ!= Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNot ifs Count . Every 6 Hours Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hour Ġ% Ġ 6 Ġ!= Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNot ifs Count . Every 3 Hours Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hour Ġ% Ġ 3 Ġ!= Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclick Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` package ` Ġ= ĠpackageName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠgetString ( R . string . dee plink _ start ). to Uri () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ ACTIVITY _ CLEAR _ TOP ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġclick Pending Intent Ġ= ĠPending Intent . getActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Intent , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ ONE _ SHOT ) ĊĊĠĠĠĠĠĠĠ Ġval Ġchannel Id Ġ= Ġremote Message . notification ?. channelId ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġdefault Song Uri Ġ= ĠRing tone Manager . getDefault Uri ( Ring tone Manager . TYPE _ NOTIFICATION ) ĊĠĠĠĠĠĠĠ Ġval Ġnotification Builder = ĠNotification Compat . Builder ( this , channelId Ġ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Small Icon ( R . drawable . ic _ notification ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Title ( remote Message . notification ?. title ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Text ( remote Message . notification ?. body ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Auto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Sound ( default Song Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Intent ( click Pending Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnotification Manager Ġ= Ġget System Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . notification Channels . find Ġ{ channel Ġ-> Ġchannel . id Ġ== Ġchannel Id } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Message . data [ NOTIFICATION _ CHANNEL _ ID _ KEY ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġnotification Id Ġ= Ġ( currentTime Ġxor ĠcurrentTime Ġ ush r ĠLONG _ US HR ). toInt () ĊĊĠĠĠĠĠĠĠ Ġnotification Manager . notify ( notification Id , Ġnotification Builder . build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Token ( new Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Token ( new Token ) ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( dispatcher . io ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf cm Token Refresh er . write ( new Token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }