package Ġcom . te o . tt ask s . util Ċ Ċ import Ġandroid . app . Alarm Manager Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . app . Task Stack Builder Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġcom . te o . tt ask s . R Ċ import Ġcom . te o . tt ask s . data . local . Pref Helper Ċ import Ġcom . te o . tt ask s . data . model . Task Ċ import Ġcom . te o . tt ask s . re ceiv ers . Task Notification Receiver Ċ import Ġcom . te o . tt ask s . ui . task _ detail . Task Detail Activity Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠNotification Helper ( private Ġval Ġcontext : ĠContext , Ġprivate Ġval Ġpref Helper : ĠPref Helper ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠNotification Ġchannel ĠID Ġfor Ġrem inders Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCHAN NEL _ REM IND ERS Ġ= Ġ" rem inders " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSchedule Ġa Ġnotification Ġto Ġshow Ġup Ġat Ġthe Ġtask 's Ġreminder Ġdate Ġand Ġtime . ĊĠĠĠĠ Ġ* ĠDoes Ġnothing Ġif Ġthe Ġreminder Ġdate Ġdoesn 't Ġexist Ġor Ġif Ġthe Ġtask Ġis Ġalready Ġcompleted . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtask Ġtask ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠĠ Ġnotification ĠID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġschedule Task Notification ( task : ĠTask , Ġid : ĠInt Ġ= Ġtask . notification Id ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreminder Date Ġ= Ġtask . reminder Date ĊĊĠĠĠĠĠĠĠ Ġif Ġ( task . is Completed Ġ|| Ġreminder Date Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnotification Id Ġ= Ġif Ġ( id Ġ!= Ġ 0 ) Ġid Ġelse Ġtask . notification Id ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" scheduling Ġnotification Ġfor Ġ% s Ġwith Ġid Ġ% d ", Ġtask . id , Ġnotification Id ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġstack Ġbuilder Ġobject Ġwill Ġcontain Ġan Ġart ificial Ġback Ġstack Ġfor Ġthe Ġstarted ĠActivity . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġensures Ġthat Ġnavig ating Ġbackward Ġfrom Ġthe ĠActivity Ġleads Ġout Ġof ĊĠĠĠĠĠĠĠ Ġ// Ġyour Ġapplication Ġto Ġthe ĠHome Ġscreen . ĊĠĠĠĠĠĠĠ Ġval Ġresult Pending Intent Ġ= ĠTask Stack Builder . create ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreates Ġan Ġexplicit Ġintent Ġfor Ġan ĠActivity Ġin Ġyour Ġapp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Intent Ġ= ĠTask Detail Activity . getStart Intent ( context , Ġtask . id , Ġtask . task List Id , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdds Ġthe Ġback Ġstack Ġfor Ġthe ĠIntent Ġ( but Ġnot Ġthe ĠIntent Ġitself ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Parent Stack ( Task Detail Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdds Ġthe ĠIntent Ġthat Ġstarts Ġthe ĠActivity Ġto Ġthe Ġtop Ġof Ġthe Ġstack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Next Intent ( result Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Pending Intent ( 0 , ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġ" mark Ġas Ġcompleted " Ġaction ĊĠĠĠĠĠĠĠ Ġval Ġcompleted Intent Ġ= ĠIntent ( context , ĠTask Notification Receiver :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Task Notification Receiver . NOTIFICATION _ ID , Ġnotification Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Task Notification Receiver . TASK _ ID , Ġtask . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠTask Notification Receiver . ACTION _ COMPLETE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcompleted Pending Intent Ġ= ĠPending Intent . get Broadcast ( context , Ġ 0 , Ġcompleted Intent , ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĠĠĠĠĠĠĠ Ġval Ġcompleted Action Ġ= ĠNotification Compat . Action ( R . drawable . ic _ done _ 2 4 dp , Ġ" Mark Ġas Ġcompleted ", Ġcompleted Pending Intent ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġdelete Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġdelete Intent Ġ= ĠIntent ( context , ĠTask Notification Receiver :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Task Notification Receiver . TASK _ ID , Ġtask . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠTask Notification Receiver . ACTION _ DELETE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdelete Pending Intent Ġ= ĠPending Intent . get Broadcast ( context , Ġ 0 , Ġdelete Intent , ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĊĠĠĠĠĠĠĠ Ġval Ġled Color String Ġ= Ġpref Helper . notification Led Color ĊĠĠĠĠĠĠĠ Ġval Ġled Color Ġ= Ġif Ġ( led Color String . isEmpty ()) ĠNotification Compat . COLOR _ DEFAULT Ġelse ĠColor . parse Color ( led Color String ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġnotification ĊĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= ĠNotification Compat . Builder ( context , Ġ" default ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( String . format ( context . getString ( R . string . task _ due ), Ġtask . title )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( context . getString ( R . string . notification _ more _ info )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ assignment _ turn ed _ in _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Defaults ( if Ġ( pref Helper . notification V ibration ) ĠNotification . DEFAULT _ V IB RATE Ġelse Ġ 0 ) Ġ// Ġenable Ġvi br ation Ġonly Ġif Ġrequested ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Sound ( pref Helper . notification Sound ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Only Alert Once ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Lights ( led Color , Ġ 5 0 0 , Ġ 2 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setColor ( Resources Compat . getColor ( context . resources , ĠR . color . color Primary , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( result Pending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Delete Intent ( delete Pending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addAction ( completed Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Channel Id ( CHANNEL _ REM IND ERS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġnotification Intent Ġ= ĠIntent ( context , ĠTask Notification Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġnotification Intent . putExtra ( Task Notification Receiver . NOTIFICATION _ ID , Ġnotification Id ) ĊĠĠĠĠĠĠĠ Ġnotification Intent . putExtra ( Task Notification Receiver . NOTIFICATION , Ġnotification ) ĊĠĠĠĠĠĠĠ Ġnotification Intent . action Ġ= ĠTask Notification Receiver . ACTION _ PUBL ISH ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= ĠPending Intent . get Broadcast ( context , Ġnotification Id , Ġnotification Intent , ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSchedule Ġan Ġalarm Ġfor Ġthe Ġreminder Ġtime Ġon Ġthe Ġdue Ġdate ĊĠĠĠĠĠĠĠ Ġ( context . getSystem Service ( Context . ALARM _ SERVICE ) Ġas ĠAlarm Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( Alarm Manager . RTC _ WAKE UP , Ġreminder Date . to Instant (). to Epoch Milli (), Ġpending Intent ) ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Scheduled Ġalarm Ġfor Ġtask Ġ% s Ġat Ġ% s ", Ġtask . id , Ġreminder Date ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel Ġa Ġnotification . ĠUsed Ġwhen Ġdeleting Ġa Ġtask . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid Ġnotification ĠID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcancel Task Notification ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCancel Ġscheduled Ġnotification ĊĠĠĠĠĠĠĠ Ġval Ġnotification Intent Ġ= ĠIntent ( context , ĠTask Notification Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġnotification Intent . action Ġ= ĠTask Notification Receiver . ACTION _ PUBL ISH ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= ĠPending Intent . get Broadcast ( context , Ġid , Ġnotification Intent , ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĠĠĠĠĠĠĠ Ġval Ġalarm Manager Ġ= Ġcontext . getSystem Service ( Context . ALARM _ SERVICE ) Ġas ĠAlarm Manager ĊĠĠĠĠĠĠĠ Ġalarm Manager . cancel ( pending Intent ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCancel Ġactive Ġnotification ĊĠĠĠĠĠĠĠ Ġval Ġnotification Manager Ġ= Ġcontext . getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠ Ġnotification Manager . cancel ( id ) ĊĠĠĠ Ġ} Ċ } Ċ