package Ġio . github . hi rom oo . ky ute ch timetable Ċ Ċ import Ġandroid . app . Alarm Manager Ċ import Ġandroid . app . Alarm Manager . RTC _ WAKE UP Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Pending Intent . FLAG _ CANCEL _ CURRENT Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . ALARM _ SERVICE Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . media . Ring tone Manager Ċ import Ġandroid . media . Ring tone Manager . TYPE _ NOTIFICATION Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . app . Notification Manager Compat Ċ import Ġio . github . hi rom oo . ky ute ch timetable . model . Data . Companion . get Notification Id Ċ import Ġio . github . hi rom oo . ky ute ch timetable . model . Data . Companion . j apan Zone Id Ċ import Ġio . github . hi rom oo . ky ute ch timetable . model . Data . Companion . notification Ids Ċ import Ġio . github . hi rom oo . ky ute ch timetable . model . Data . Companion . schedules Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ import Ġjava . time . Z onedDateTime Ċ Ċ class ĠNot ifier ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCHAN NEL _ ID Ġ= Ġ" schedule " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġalarm Manager Ġ= Ġcontext . getSystem Service ( ALARM _ SERVICE ) Ġas ĠAlarm Manager ĊĊĠĠĠ Ġfun Ġupdate All () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠ Ġready () ĊĠĠĠĠĠĠĠ Ġfor Ġ( id Ġin Ġnotification Ids . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschedule Ġ= Ġs chedules . first OrNull Ġ{ Ġit . id Ġ== Ġid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschedule ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . outline _ event _ 2 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart DateTime . at Zone ( zone Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart DateTime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. minus Minutes ( notification Minute . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ( ĊĠĠĠĠĠĠĠ Ġid : ĠString , ĊĠĠĠĠĠĠĠ Ġicon : ĠInt , ĊĠĠĠĠĠĠĠ Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġtext : ĠString , ĊĠĠĠĠĠĠĠ ĠstartTime : ĠZ onedDateTime , ĊĠĠĠĠĠĠĠ Ġnotification Time : ĠLocalDateTime ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( startTime Ġ< ĠZ onedDateTime . now ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! notification Ids . containsKey ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Ids [ id ] Ġ= Ġget Notification Id () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġalarm Intent Ġ= Ġget Alarm Intent ( id , Ġicon , Ġtitle , Ġtext , ĠstartTime ) !! ĊĠĠĠĠĠĠĠ Ġalarm Manager . set Exact And Allow While Idle ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRTC _ WAKE UP , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Time . to Epoch Second ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj apan Zone Id . rules . get Offset ( Instant . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ* Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalarm Intent ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify ( id : ĠInt , Ġicon : ĠInt , Ġtitle : ĠString , Ġtext : ĠString , Ġtime : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= ĠNotification Compat . Builder ( context , ĠCHAN NEL _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set When ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show When ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġwith ( Notification Manager Compat . from ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ( id , Ġnotification ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġready () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= ĠComponent Name ( context , ĠAlarm Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġcontext . package Manager . set Component Enabled Setting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . COMPONENT _ ENABLED _ STATE _ ENABLED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . D ONT _ KILL _ APP ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcreate Notification Channel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Alarm Intent ( id )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalarm Manager . cancel ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotification Ids [ id ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Notification Manager Compat . from ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotification Ids . remove ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= ĠComponent Name ( context , ĠAlarm Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġcontext . package Manager . set Component Enabled Setting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . COMPONENT _ ENABLED _ STATE _ DISABLED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . D ONT _ KILL _ APP ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwith ( Notification Manager Compat . from ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Alarm Intent ( ĊĠĠĠĠĠĠĠ Ġid : ĠString , ĊĠĠĠĠĠĠĠ Ġicon : ĠInt , ĊĠĠĠĠĠĠĠ Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġtext : ĠString , ĊĠĠĠĠĠĠĠ Ġtime : ĠZ onedDateTime ĊĠĠĠ Ġ): ĠPending Intent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnotification Ids [ id ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . get Broadcast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( context , ĠAlarm Receiver :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" id ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" icon ", Ġicon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" title ", Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" text ", Ġtext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" time ", Ġtime . to Epoch Second () Ġ* Ġ 1 0 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFLAG _ CANCEL _ CURRENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Alarm Intent ( id : ĠString ): ĠPending Intent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnotification Ids [ id ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . get Broadcast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( context , ĠAlarm Receiver :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFLAG _ CANCEL _ CURRENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notification Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġcontext . getString ( R . string . channel _ name _ schedule ) ĊĠĠĠĠĠĠĠ Ġval Ġdescription Text Ġ= Ġcontext . getString ( R . string . channel _ description _ schedule ) ĊĠĠĠĠĠĠĠ Ġval Ġimportance Ġ= ĠNotification Manager . IMPORT ANCE _ HIGH ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( CHANNEL _ ID , Ġname , Ġimportance ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Sound ( Ring tone Manager . getDefault Uri ( TYPE _ NOTIFICATION ), Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġthe Ġchannel Ġwith Ġthe Ġsystem ĊĠĠĠĠĠĠĠ Ġval Ġnotification Manager : ĠNotification Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel ) ĊĠĠĠ Ġ} Ċ }