package Ġk tu . edu . pro jekt as . app . ui . schedule Ċ Ċ 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 . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . firestore . Document Snapshot Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġk tu . edu . pro jekt as . R Ċ import Ġk tu . edu . pro jekt as . app . data . Event Reg Ċ import Ġk tu . edu . pro jekt as . app . data . Schedule ViewModel Ċ import Ġk tu . edu . pro jekt as . app . data . Schedule ViewModel Factory Ċ import Ġk tu . edu . pro jekt as . app . data . User Ċ import Ġk tu . edu . pro jekt as . app . ui . Home Fragment Ċ import Ġk tu . edu . pro jekt as . app . utils .* Ċ import Ġk tu . edu . pro jekt as . databinding . Fragment Event Binding Ċ import Ġjava . time . LocalDateTime Ċ Ċ // Ġfragment Ġclass Ġfor Ġviewing Ġevent 's Ġdetails Ċ class ĠEvent Fragment : ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Event Binding ĊĠĠĠ Ġprivate Ġval Ġuser Ġ= ĠFirebase Auth . getInstance (). currentUser ĊĠĠĠ Ġprivate Ġval Ġdb Ġ= ĠĠĠ ĠFirebase Fire store . getInstance () ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠuserData Ġ Ġ: ĠĠ ĠDocument Snapshot ĊĠĠĠ Ġprivate Ġvar ĠuserData 1 Ġ: ĠUser ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġ: ĠSchedule ViewModel Ġby Ġactivity ViewModels Ġ{ ĊĠĠĠĠĠĠĠ ĠSchedule ViewModel Factory ( require Context ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġdb . collection (" users "). document ( user !!. uid ). get (). add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĊĠĠĠĠĠĠĠ ĠuserData 1 Ġ= ĠviewModel . userData !! ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Event Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠEvent Fragment Args . from Bundle ( require Arguments ()) ĊĊĠĠĠĠĠĠĠ Ġbinding . eventName Text . text Ġ= Ġargs . eventName ĊĠĠĠĠĠĠĠ Ġbinding . startTime Text . text Ġ= Ġformat LocalDateTime ( long To LocalDateTime ( args . endTime . to Long ())) ĊĠĠĠĠĠĠĠ Ġbinding . endTime Text . text Ġ= Ġformat LocalDateTime ( long To LocalDateTime ( args . startTime . to Long ())) ĊĠĠĠĠĠĠĠ Ġbinding . location Text . text Ġ= Ġargs . location ĊĊĠĠĠĠĠĠĠ Ġbinding . button Reg . visibility Ġ= Ġif ( args . groupId Ġ!= Ġ 0 ) Ġ ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . button Reg . visibility Ġ= Ġif Ġ( userData 1 !!. role Ġ!= Ġ" L ect urer ") ĠView . VISIBLE Ġelse ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġbinding . button Alert . visibility Ġ= Ġif Ġ( userData 1 !!. role Ġ== Ġ" L ect urer ") ĠView . VISIBLE Ġelse ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġbinding . button Reg . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Reg Ġ= ĠEvent Reg ( user !!. uid . toString (), args . firebase id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCheck If Registered ( event Reg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . student List Btn . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaction Ġ= ĠEvent Fragment Directions . action Event Fragment To Student List Fragment ( args . firebase id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. find Nav Controller () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . navigate ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġbinding . button Alert . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert Registered Users ( args . firebase id . toString (), Ġargs . eventName , Ġargs . startTime . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġalert Registered Users ( event : ĠString , Ġevent name Ġ: ĠString , Ġevent date : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnot if Id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġcreate Notification (" up coming _ events _ channel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" CO VID ĠAL ERT ĠCHECK ĠFOR ĠYOUR SELF ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Class Ġthat Ġcov id ĠRE CO GN IZED : Ġ${ event name }, Ġat : Ġ${ format LocalDateTime ( long To LocalDateTime ( event date )) }", notif Id ) ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĠSn ackbar . make ( it . findViewById ( R . id . drawer _ layout )," Alert Ġsuccessfully Ġpublished !", ĠSn ackbar . LENGTH _ LONG ). show ()} ĊĠĠĠĠĠĠĠ Ġdb . collection (" event Reg "). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġdocuments Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( document Ġin Ġdocuments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document . get (" event id ") !!. equals ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" userid " Ġto Ġdocument . get (" userid "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" date " Ġto Ġformat LocalDateTime ( LocalDateTime . now ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" text " Ġto Ġ" In Ġyour Ġclass :${ event name }, Ġat Ġ${ format LocalDateTime ( long To LocalDateTime ( event date ))} ĠCOVID ĠRE CO GN IZED !! !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġdocument Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . collection (" notifications ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġinsert Event Registration ( event : ĠEvent Reg ){ ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" event id " Ġto Ġevent . event id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" userid " Ġto Ġevent . userid ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdb . collection (" event Reg ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĠSn ackbar . make ( it . findViewById ( R . id . drawer _ layout )," You Ġhave Ġregistered Ġsuccessfully !", ĠSn ackbar . LENGTH _ LONG ). show ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠCheck If Registered ( event : ĠEvent Reg ){ ĊĠĠĠĠĠĠĠ Ġvar Ġcheck Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġdb . collection (" event Reg "). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġdocuments Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( document Ġin Ġdocuments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document . get (" event id ") !!. equals ( event . event id ) Ġ&& Ġdocument . get (" userid ") !!. equals ( event . userid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġdocument Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġdocument Ġnot Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Event Registration ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĠSn ackbar . make ( it . findViewById ( R . id . drawer _ layout ), Ġ" You Ġhave Ġregistered Ġalready ", ĠSn ackbar . LENGTH _ LONG ). show () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġcreate Notification ( channelId Ġ: ĠString , Ġtitle : ĠString , Ġsubtitle : ĠString , Ġid : Int ){ ĊĠĠĠĠĠĠĠ Ġcreate Notification Channel ( channelId ," Up coming Ġevents ") ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( require Context (), ĠHome Fragment :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent : ĠPending Intent Ġ= ĠPending Intent . getActivity ( require Context (), Ġ 0 , Ġintent , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠNotification Compat . Builder ( require Context (), Ġchannel Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . calendar _ ic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( subtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Notification Compat . PRIORITY _ DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( pending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġm Notification Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĊĠĠĠĠĠĠĠ Ġwith ( m Notification Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ( id , Ġbuilder . build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notification Channel ( channelId Ġ: ĠString , desc : String ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimportance Ġ= ĠNotification Manager . IMPORT ANCE _ DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( channelId , Ġchannel Id , Ġimportance ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdesc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Manager : ĠNotification Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }