package Ġcom . vs . meet ly Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . ActionBar Drawer Toggle Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . browser . custom tabs . Custom Tabs Intent Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Ċ import Ġcom . google . android . material . datepicker . Material DatePicker Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . android . material . time picker . Material Time Picker Ċ import Ġcom . google . android . material . time picker . Time Format Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġcom . vs . meet ly . adapters . I Meeting RV Adapter Ċ import Ġcom . vs . meet ly . adapters . Meeting Adapter Ċ import Ġcom . vs . meet ly . da os . Meeting Dao Ċ import Ġcom . vs . meet ly . da os . User Dao Ċ import Ġcom . vs . meet ly . mis cellaneous . Color Picker Ċ import Ġcom . vs . meet ly . mis cellaneous . Link Picker Ċ import Ġcom . vs . meet ly . mod als . Meeting Ċ import Ġcom . vs . meet ly . mod als . User Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ meeting _ view _ detail .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ user _ profile .* Ċ import Ġkotlinx . android . synt hetic . main . dialog _ bottom _ navigation .* Ċ import Ġkotlinx . android . synt hetic . main . header _ layout .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . tasks . await Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util .* Ċ Ċ @ Suppress (" DE PREC ATION ") Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠI Meeting RV Adapter Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġaction Bar Drawer Toggle : ĠAction Bar Drawer Toggle ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĊĠĠĠ Ġprivate Ġvar ĠdateTime Selector Flag Ġ: ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġdate Selected Ġ: ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġvar Ġtime Selected Ġ: ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser : ĠUser ĊĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠMeeting Adapter ĊĊĠĠĠ Ġprivate Ġvar Ġmeeting List Ġ= Ġmutable ListOf < Meeting >() ĊĊĠĠĠ Ġprivate Ġvar Ġtemp Meeting List Ġ= Ġmutable ListOf < Meeting >() ĊĊĠĠĠ Ġlateinit Ġvar Ġfire store : ĠFirebase Fire store ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Selected Date : ĠLong ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĊĠĠĠĠĠĠĠ Ġfire store Ġ= ĠFirebase Fire store . getInstance () ĊĊĠĠĠĠĠĠĠ Ġmain Pre loader . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ ĠsetUp Views () ĊĠĠĠĠĠĠĠ ĠsetUp Fire Store () ĊĠĠĠĠĠĠĠ ĠsetUp RecyclerView () ĊĠĠĠĠĠĠĠ Ġload UserData () ĊĊĠĠĠĠĠĠĠ Ġdisplay Cal ender . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Date In Millis Ġ= Ġcurrent Selected Date Ġ?: ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Picker Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial DatePicker . Builder . date Picker (). setSelection ( selected Date In Millis ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker . show ( support FragmentManager , Ġ" DatePicker ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker . add On Positive Button ClickListener Ġ{ Ġdate In Millis Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Date Selected ( date In Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker . add On Negative Button ClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ"-", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker . add On Cancel Listener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ"< - ĠBack ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( main Drawer . is Drawer Open ( Gravity Compat . START )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Drawer . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity Snackbar , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Press Ġback Ġonce Ġmore Ġto Ġexit !", ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . Base _ Theme Overlay _ Material Components _ Material AlertDialog ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( resources . getString ( R . string . exit Message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( resources . getString ( R . string . cancel )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRespond Ġto Ġnegative Ġbutton Ġpress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( resources . getString ( R . string . yes )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġload UserData () Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent UserId Ġ= Ġauth . currentUser !!. uid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Dao Ġ= ĠUser Dao () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġuser Dao . getUser ById ( current UserId ). await (). toObject ( User :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader _ title . text Ġ= Ġuser . displayName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Image ( user . imageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġrequest Code Ġ== ĠMY _ PROFILE _ REQUEST _ CODE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload UserData () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġrequest Code Ġ== ĠME ET ING _ FILTER _ REQUEST _ CODE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ"< - Ġpressed !! ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Fire Store () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp RecyclerView () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġrequest Code Ġ== ĠME ET ING _ VIEW _ DETAIL _ CODE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Meeting ĠView ĠDetail !", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Fire Store () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp RecyclerView () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Cancelled ", Ġ" Cancelled ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Fire Store () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcollection Reference Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfire store . collection (" meet ings "). where Array Contains (" userId ", Ġauth . currentUser !!. uid ) ĊĠĠĠĠĠĠĠ Ġcollection Reference . add Snapshot Listener Ġ{ Ġvalue , Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull Ġ|| Ġerror Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Error Ġfetching Ġdata ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting List . addAll ( value . to Objects ( Meeting :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( meeting List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Meeting List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain No Data . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain No Data . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Meeting List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Meeting List . addAll ( meeting List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠMeeting Adapter ( this , Ġtemp Meeting List , Ġthis ) ĊĠĠĠĠĠĠĠ Ġmeeting Recycler view . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġmeeting Recycler view . adapter Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Image ( imageUrl : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠG lide . with ( this ). load ( imageUrl ). circle Crop (). into ( header _ image ) ĊĠĠĠĠĠĠĠ Ġmain Pre loader . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Views () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUp Drawer Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Drawer Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( app Bar ) ĊĠĠĠĠĠĠĠ Ġaction Bar Drawer Toggle Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction Bar Drawer Toggle ( this , Ġmain Drawer , ĠR . string . app _ name , ĠR . string . app _ name ) ĊĠĠĠĠĠĠĠ Ġaction Bar Drawer Toggle . sync State () ĊĠĠĠĠĠĠĠ Ġnavigation List . set Navigation ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . profile Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Drawer . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠUser Profile :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠMY _ PROFILE _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . today Meeting Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Drawer . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠCalendar . getInstance (). time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsdf Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform ated Date Ġ= Ġsdf . format ( date ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġform ated Date . toString (), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠMeeting Filter :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" DATE ", Ġform ated Date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠME ET ING _ FILTER _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . new Meeting Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Drawer . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠBottom Sheet Dialog ( this , ĠR . style . Bottom Sheet Dialog Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Ġbelow Ġline Ġwe Ġare Ġinfl ating Ġa Ġlayout Ġfile Ġwhich Ġwe Ġhave Ġcreated . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( R . layout . dialog _ bottom _ navigation , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set ContentView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGetting Ġall Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinal Meeting Link Ġ= ĠLink Picker . get Link () Ġ+ Ġ"- r -" Ġ+ ĠgetRandom String ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġview . findViewById < EditText >( R . id . meeting _ title _ v 2 ) Ġas ĠEditText ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġview . findViewById < EditText >( R . id . meeting _ content _ v 2 ) Ġas ĠEditText ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateTime Select Ġ= Ġview . findViewById < EditText >( R . id . date _ time _ new _ meeting _ v 2 ) Ġas ĠEditText ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubmit Button V 2 Ġ= Ġview . findViewById < Button >( R . id . button Submit New Meeting V 2 ) Ġas ĠButton ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit Button V 2 . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( title . text . isEmpty () Ġ|| Ġcontent . text . isEmpty () Ġ|| Ġ! dateTime Selector Flag Ġ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( title . text . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . setError (" Title Ġis Ġrequired !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Ġcontent . text . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . setError (" Content Ġis Ġrequired !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime Select . setError (" Date Ġ& ĠTime Ġis Ġrequired !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId : ĠArrayList < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId . add ( auth . currentUser !!. uid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Meeting Ġ= ĠMeeting ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Meeting Link , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor Picker . getColor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeeting Dao Ġ= ĠMeeting Dao () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Dao . add Meeting ( new Meeting ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity Snackbar , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Meeting Ġadded Ġsuccessfully !", ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . raise Request Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Drawer . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" https :// meet ly . t awk . help " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠCustom Tabs Intent . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠCustom Tabs Intent Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Tabs Intent . launch Url ( this , ĠUri . parse ( url )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . dev Support Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Drawer . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠSupport Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . meet De vs Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Drawer . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠDe vs Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . used Lib Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Drawer . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , Library Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . logout Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Drawer . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . Base _ Theme Overlay _ Material Components _ Material AlertDialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( resources . getString ( R . string . confirm _ logout )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( resources . getString ( R . string . cancel )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRespond Ġto Ġnegative Ġbutton Ġpress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( resources . getString ( R . string . logout )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRespond Ġto Ġpositive Ġbutton Ġpress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Auth . getInstance (). sign Out () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Logout ĠSuccess full !", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠLogin Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( action Bar Drawer Toggle . on Options ItemSelected ( item )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . right _ menu _ search _ bar , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġmenu ?. find Item ( R . id . search _ action ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= Ġitem ?. action View Ġas Ġandroidx . appcompat . widget . Search View ĊĊĠĠĠĠĠĠĠ Ġval Ġedit text = search View . findViewById < EditText >( R . id . search _ src _ text ) Ġas ĠEditText ĊĊĠĠĠĠĠĠĠ Ġedit text . setTextColor ( getResources (). getColor ( R . color . l blue _ 2 0 0 )) ĊĊĠĠĠĠĠĠĠ Ġsearch View . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Meeting List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Text Ġ= Ġnew Text !!. toLowerCase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( search Text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . title . toLowerCase ( Locale . getDefault ()). contains ( search Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Meeting List . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain No Data . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain No Data . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( meeting List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain No Data . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain No Data . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Meeting List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Meeting List . addAll ( meeting List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Clicked ( meeting : ĠMeeting ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Col Ref Ġ= Ġfire store . collection (" meet ings ") ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeeting Query Ġ= Ġmeeting Col Ref ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" content ", Ġmeeting . content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" title ", Ġmeeting . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" meeting _ link ", Ġmeeting . meeting _ link ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" date ", Ġmeeting . date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" time ", Ġmeeting . time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" userId ", Ġmeeting . userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" color ", Ġmeeting . color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( meeting Query . documents . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( document Ġin Ġmeeting Query ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . Base _ Theme Overlay _ Material Components _ Material AlertDialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( resources . getString ( R . string . confirm _ logout )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( resources . getString ( R . string . cancel )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRespond Ġto Ġnegative Ġbutton Ġpress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( resources . getString ( R . string . yes )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Col Ref . document ( document . id ). delete (). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" Error !", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġmeet ings Ġmatched Ġthe Ġquery .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Into Activity ( meeting : ĠMeeting ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeeting Col Ref Ġ= Ġfire store . collection (" meet ings ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeeting Query Ġ= Ġmeeting Col Ref ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" content ", Ġmeeting . content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" title ", Ġmeeting . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" meeting _ link ", Ġmeeting . meeting _ link ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" date ", Ġmeeting . date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" time ", Ġmeeting . time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" userId ", Ġmeeting . userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo (" color ", Ġmeeting . color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( meeting Query . documents . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( document Ġin Ġmeeting Query ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġdocument . id , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ MainActivity , ĠMeeting View Detail :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" meeting _ document _ id ", Ġdocument . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠME ET ING _ VIEW _ DETAIL _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġon Date Selected ( dateTime Stamp In Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Selected Date Ġ= Ġdate TimeStamp In Millis ĊĠĠĠĠĠĠĠ Ġval ĠdateTime : ĠLocalDateTime Ġ= ĠLocalDateTime . of Instant ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Milli ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Date !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠZone Id . system Default () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdate As Formatted Text : ĠString Ġ= ĠdateTime . format ( DateTime Formatter . of Pattern (" yyyy - MM - dd ")) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠMeeting Filter :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" DATE ", Ġdate As Formatted Text ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠME ET ING _ FILTER _ REQUEST _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġset For Date And Time ( dateTime Stamp In Millis : ĠLong , Ġview : ĠView ){ ĊĠĠĠĠĠĠĠ Ġcurrent Selected Date Ġ= Ġdate TimeStamp In Millis ĊĠĠĠĠĠĠĠ Ġval ĠdateTime : ĠLocalDateTime Ġ= ĠLocalDateTime . of Instant ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Milli ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Date !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠZone Id . system Default () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdate As Formatted Text : ĠString Ġ= ĠdateTime . format ( DateTime Formatter . of Pattern (" yyyy - MM - dd ")) ĊĠĠĠĠĠĠĠ Ġval Ġpicker Ġ= ĠMaterial Time Picker . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTime Format ( Time Format . CLOCK _ 1 2 H ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Hour ( 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Minute ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle Text (" Select ĠTime ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġpicker . show ( support FragmentManager , Ġ" Me et ly ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġlocal Time Ġ: ĠString Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġpicker . add On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( picker . hour Ġ> Ġ 1 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Time Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ("% 0 2 d ", Ġpicker . hour Ġ- Ġ 1 2 ) Ġ+ Ġ":" Ġ+ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 0 2 d ", Ġpicker . minute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ+ Ġ" ĠPM " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Time Ġ= ĠString . format ("% 0 2 d ", Ġpicker . hour ) Ġ+ Ġ":" Ġ+ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 0 2 d ", Ġpicker . minute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ+ Ġ" ĠAM " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateTime V 2 Ġ= Ġview . findViewById < EditText >( R . id . date _ time _ new _ meeting _ v 2 ) Ġas ĠEditText ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime V 2 . setText ("${ date As Formatted Text } Ġ Ġ${ local Time }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFlag Ġto Ġcheck Ġif Ġdate Ġand Ġtime Ġare Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime Selector Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Selected Ġ= Ġdate As Formatted Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Selected Ġ= Ġlocal Time ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// A Ġunique Ġcode Ġfor Ġstarting Ġthe Ġactivity Ġfor Ġresult ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMY _ PROFILE _ REQUEST _ CODE : ĠInt Ġ= Ġ 1 1 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠME ET ING _ FILTER _ REQUEST _ CODE : ĠInt Ġ= Ġ 2 2 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠME ET ING _ VIEW _ DETAIL _ CODE : ĠInt Ġ= Ġ 3 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose Layout Drawer ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Drawer . close Draw ers () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetRandom String ( length : ĠInt ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġallowed Chars Ġ= Ġ(' A ' .. ' Z ') Ġ+ Ġ(' a ' .. ' z ') Ġ+ Ġ(' 0 ' .. ' 9 ') ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 1 .. length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġallowed Chars . random () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġfun ĠDateTime Function ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠdateTime Selector Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġselected Date In Millis Ġ= Ġcurrent Selected Date Ġ?: ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġval Ġdate Picker Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial DatePicker . Builder . date Picker (). setSelection ( selected Date In Millis ). build () ĊĠĠĠĠĠĠĠ Ġdate Picker . show ( support FragmentManager , Ġ" DatePicker ") ĊĠĠĠĠĠĠĠ Ġdate Picker . add On Positive Button ClickListener Ġ{ Ġdate In Millis Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset For Date And Time ( date In Millis , Ġview ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdate Picker . add On Negative Button ClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ"-", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdate Picker . add On Cancel Listener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ"< - ĠBack ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }