/* Ċ Ġ* ĠĠ ĠCopyright Ġ 2 0 1 9 ĠB eno it ĠLET OND OR Ċ Ġ* Ċ Ġ* ĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . b eno it let ond or . easy budget app . push Ċ Ċ import Ġcom . batch . android . Batch Ċ import Ġcom . b eno it let ond or . easy budget app . Build Config Ċ import Ġcom . b eno it let ond or . easy budget app . helper .* Ċ import Ġcom . b eno it let ond or . easy budget app . i ab . I ab Ċ import Ġcom . b eno it let ond or . easy budget app . parameters .* Ċ import Ġcom . google . firebase . messaging . Firebase Messaging Service Ċ import Ġcom . google . firebase . messaging . Remote Message Ċ Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . Date Ċ Ċ import Ġorg . k oin . java . K oin Java Component . get Ċ Ċ /** Ċ Ġ* ĠService Ġthat Ġhandles ĠBatch Ġp ushes Ċ Ġ* Ċ Ġ* Ġ@ author ĠB eno it ĠLET OND OR Ċ Ġ*/ Ċ class ĠPush Service Ġ: ĠFirebase Messaging Service () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġi ab Ġ= Ġget ( I ab :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġparameters Ġ= Ġget ( Parameters :: class . java ) Ċ Ċ // Ġ-------------------------------- ---> ĊĊĠĠĠ Ġoverride Ġfun Ġon Message Received ( remote Message : ĠRemote Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Message Received ( remote Message ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġpush Ġis Ġvalid ĊĠĠĠĠĠĠĠ Ġif Ġ( Batch . Push . should Display Push ( this , Ġremote Message )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! should Display Push ( remote Message )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug (" Not Ġdisplaying Ġpush Ġcause Ġconditions Ġare Ġnot Ġmatching ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBatch . Push . display Notification ( this , Ġremote Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthe Ġpush Ġshould Ġbe Ġdisplayed ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġremote Message ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġshould Ġdisplay Ġthe Ġpush , Ġfalse Ġotherwise ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshould Display Push ( remote Message : ĠRemote Message ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis User Ok ( remote Message ) Ġ&& Ġis Version Compatible ( remote Message ) Ġ&& Ġis Prem ium Compatible ( remote Message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthe Ġpush Ġshould Ġbe Ġdisplayed Ġaccording Ġto Ġuser Ġchoice ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġremote Message ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġshould Ġdisplay Ġthe Ġpush , Ġfalse Ġotherwise ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis User Ok ( remote Message : ĠRemote Message ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġit 's Ġa Ġdaily Ġreminder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remote Message . data . containsKey ( DA IL Y _ REM IND ER _ KEY ) Ġ&& Ġ" true " Ġ== Ġremote Message . data [ DA IL Y _ REM IND ER _ KEY ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġfor Ġprem ium Ġusers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ġ! i ab . is User Prem ium () Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġuser Ġchoice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ġ! parameters . is User Allow ing Daily Reminder P ushes () Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġthe Ġapp Ġhasn 't Ġbeen Ġopened Ġtoday ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Open Timestamp Ġ= Ġparameters . getLast Open Timestamp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Open Timestamp Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Open Ġ= ĠDate ( last Open Timestamp ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Day Ġ= Ġcal . get ( Calendar . DAY _ OF _ YEAR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal . time Ġ= Ġlast Open ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Open Day Ġ= Ġcal . get ( Calendar . DAY _ OF _ YEAR ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent Day Ġ!= Ġlast Open Day ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( remote Message . data . containsKey ( MONTH LY _ REM IND ER _ KEY ) Ġ&& Ġ" true " Ġ== Ġremote Message . data [ MONTH LY _ REM IND ER _ KEY ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ab . is User Prem ium () Ġ&& Ġparameters . is User Allow ing Monthly Reminder P ushes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠElse Ġit Ġmust Ġbe Ġan Ġupdate Ġpush ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparameters . is User Allow ing Update P ushes () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . error (" Error Ġwhile Ġchecking Ġuser Ġok Ġfor Ġpush ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthe Ġpush Ġshould Ġbe Ġdisplayed Ġaccording Ġto Ġversion Ġconstr ains ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġremote Message ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġshould Ġdisplay Ġthe Ġpush , Ġfalse Ġotherwise ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Version Compatible ( remote Message : ĠRemote Message ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Version Ġ= ĠBuild Config . VERSION _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmin Version Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remote Message . data . containsKey ( INT ENT _ MAX _ VERSION _ KEY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Version Ġ= ĠInteger . parseInt ( remote Message . data [ INT ENT _ MAX _ VERSION _ KEY ] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remote Message . data . containsKey ( INT ENT _ MIN _ VERSION _ KEY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Version Ġ= ĠInteger . parseInt ( remote Message . data [ INT ENT _ MIN _ VERSION _ KEY ] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBuild Config . VERSION _ CODE Ġin Ġmin Version .. max Version ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . error (" Error Ġwhile Ġchecking Ġapp Ġversion Ġfor Ġpush ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġthe Ġuser Ġstatus Ġif Ġa Ġpush Ġis Ġmarked Ġas Ġfor Ġprem ium Ġor Ġnot . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġremote Message Ġpush Ġintent ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġcompatible , Ġfalse Ġotherwise ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Prem ium Compatible ( remote Message : ĠRemote Message ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remote Message . data . containsKey ( INT ENT _ PRE MI UM _ KEY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis For Prem ium Ġ= Ġ" true " Ġ== Ġremote Message . data [ INT ENT _ PRE MI UM _ KEY ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis For Prem ium Ġ== Ġi ab . is User Prem ium () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . error (" Error Ġwhile Ġchecking Ġprem ium Ġcompatible Ġfor Ġpush ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠKey Ġto Ġretrieve Ġthe Ġmax Ġversion Ġfor Ġa Ġpush ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINTENT _ MAX _ VERSION _ KEY Ġ= Ġ" max Version " ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠKey Ġto Ġretrieve Ġthe Ġmax Ġversion Ġfor Ġa Ġpush ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINTENT _ MIN _ VERSION _ KEY Ġ= Ġ" min Version " ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠKey Ġto Ġretrieve Ġif Ġa Ġpush Ġis Ġintent ed Ġfor Ġprem ium Ġuser Ġor Ġnot ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINTENT _ PRE MI UM _ KEY Ġ= Ġ" premium " ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠKey Ġto Ġretrieve Ġthe Ġdaily Ġreminder Ġkey Ġfor Ġa Ġpush ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDA IL Y _ REM IND ER _ KEY Ġ= Ġ" daily " ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠKey Ġto Ġretrieve Ġthe Ġmonthly Ġreminder Ġkey Ġfor Ġa Ġpush ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMON TH LY _ REM IND ER _ KEY Ġ= Ġ" monthly " ĊĠĠĠ Ġ} Ċ } Ċ