package Ġcom . tern ary op . photos he lf . birthday . util . notification Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġcom . tern ary op . photos he lf . birthday . R Ċ import Ġcom . tern ary op . photos he lf . util . notification . setup Multi Line Notification Ċ import Ġcom . tern ary op . utils . date . years Between Dates Ċ import Ġjava . text . DateFormat Ċ import Ġjava . util . Calendar Ċ Ċ class ĠB irth day Notification Broadcast Receiver Ġ: ĠBroadcast Receiver () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( birthday Clear Action Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Lines . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġbirthday Clear Action Ġ= Ġ" com . tern ary op . photos he lf . birthday . clear " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġbirthday Added Tag Ġ= Ġ" com . tern ary op . photos he lf . birthday . added " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontent Lines Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġclear Birth days ( context : ĠContext ): ĠPending Intent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠB irth day Notification Broadcast Receiver :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( birthday Clear Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPending Intent . get Broadcast ( context . application Context , Ġ 0 , Ġintent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ IM MUT ABLE Ġor ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnotify Birth day Added ( context : ĠContext , Ġname : ĠString , Ġbirth date : ĠCalendar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate Format . getDate Instance (). format ( birth date . time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġage Ġ= Ġbirth date . years Between Dates (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclear Intent Ġ= Ġclear Birth days ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Text Ġ= Ġcontext . getString ( R . string . name _ with _ date _ age , Ġname , Ġdate , Ġage ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Lines . add ( content Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= ĠNotification Compat . Builder ( context , ĠB IR TH DAY _ CHANNEL _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( content Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Ticker ( context . getString ( R . string . new _ birthday _ ticker , Ġname )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . stat _ notify _ b day ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) Ġ// Ġremove Ġnotification Ġwhen Ġuser Ġclicks Ġon Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setup Multi Line Notification ( context . getString ( R . string . birth days _ found ), Ġcontent Lines , Ġclear Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Number ( content Lines . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Birth day Channel ( context ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġnotification Ġis Ġalready Ġvisible Ġthe Ġuser Ġdoesn 't Ġreceive Ġany Ġvisual Ġfeedback Ġso Ġwe Ġclear Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel ( birthday Added Tag , ĠB IR TH DAY _ NOTIFICATION _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ( birthday Added Tag , ĠB IR TH DAY _ NOTIFICATION _ ID , Ġnotification ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ