package Ġde . p ache co . cap stone . j okes Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Input Filter Ċ import Ġandroid . text . Input Filter . Length Filter Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . ListView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Nav Utils Ċ import Ġcom . firebase . ui . auth . Auth UI Ċ import Ġcom . firebase . ui . auth . Auth UI . Id p Config . Email Builder Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Firebase Auth . Auth State Listener Ċ import Ġcom . google . firebase . firestore .* Ċ import Ġjava . util .* Ċ Ċ class ĠTell Jo ke Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Message Adapter : ĠJo ke Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Message EditText : ĠEditText ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Send Button : ĠButton ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfirebase Auth : ĠFirebase Auth ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġauth State Listener : ĠAuth State Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Username : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdatabase Reference : ĠCollection Reference ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġregistration : ĠListener Registration ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ tell _ jo ke ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġm Username Ġ= ĠAN ONY MO US ĊĠĠĠĠĠĠĠ Ġdatabase Reference Ġ= ĠFirebase Fire store . getInstance (). collection ( J OK ES ) ĊĠĠĠĠĠĠĠ Ġfirebase Auth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġm Message ListView Ġ= ĠfindViewById < ListView >( R . id . message ListView ) ĊĠĠĠĠĠĠĠ Ġm Message EditText Ġ= ĠfindViewById ( R . id . message EditText ) ĊĠĠĠĠĠĠĠ Ġm Send Button Ġ= ĠfindViewById ( R . id . send Button ) ĊĠĠĠĠĠĠĠ Ġval Ġj okes : ĠList < Jo ke > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġm Message Adapter Ġ= ĠJo ke Adapter ( this , ĠR . layout . item _ jo ke , Ġj okes ) ĊĠĠĠĠĠĠĠ Ġm Message ListView . adapter Ġ= Ġm Message Adapter ĊĠĠĠĠĠĠĠ Ġset Text Listener () ĊĠĠĠĠĠĠĠ Ġset Button Listener () ĊĠĠĠĠĠĠĠ Ġset Authentication Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Text Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠEnable ĠSend Ġbutton Ġwhen Ġthere 's Ġtext Ġto Ġsend ĊĠĠĠĠĠĠĠ Ġm Message EditText !!. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( char Sequence : ĠCharSequence , Ġi : ĠInt , Ġi 1 : ĠInt , Ġi 2 : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( char Sequence : ĠCharSequence , Ġi : ĠInt , Ġi 1 : ĠInt , Ġi 2 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Send Button !!. isEnabled Ġ= Ġchar Sequence . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}. isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( editable : ĠEdit able ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm Message EditText !!. filters Ġ= ĠarrayOf < Input Filter >( Length Filter ( DEFAULT _ MSG _ LENGTH _ LIMIT )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Button Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġbutton Ġwrites Ġa Ġjo ke Ġto Ġdb Ġand Ġclears Ġthe ĠEditText ĊĠĠĠĠĠĠĠ Ġm Send Button !!. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjo ke : ĠMutable Map < String , ĠAny ?> Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjo ke [" name "] Ġ= Ġm Username ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjo ke [" jo ke "] Ġ= Ġm Message EditText !!. text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Reference !!. add ( jo ke ). add On Success Listener Ġ{ Ġdocument Reference : ĠDocument Reference Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Jo ke Ġadded Ġwith ĠID : Ġ" Ġ+ Ġdocument Reference . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe : ĠException ? Ġ-> ĠLog . w ( TAG , Ġ" Error Ġadding Ġdocument ", Ġe ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġinput Ġbox ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Message EditText !!. setText ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Authentication Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġauth State Listener Ġ= ĠAuth State Listener Ġ{ Ġfirebase Auth : ĠFirebase Auth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġfirebase Auth . currentUser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Signed In Initialize ( user . displayName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Signed Out Clean Up () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmail Builder (). build () Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġnew ĠAuth UI . Id p Config . Phone Builder (). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠAuth UI . Id p Config . Google Builder (). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠAuth UI . Id p Config . Facebook Builder (). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠAuth UI . Id p Config . Twitter Builder (). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth UI . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create SignIn Intent Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIs Smart Lock Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Available Providers ( providers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRC _ SIGN _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Signed In Initialize ( displayName : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Username Ġ= ĠdisplayName ĊĠĠĠĠĠĠĠ Ġattach Database Read Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Signed Out Clean Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Username Ġ= ĠAN ONY MO US ĊĠĠĠĠĠĠĠ Ġm Message Adapter !!. clear () ĊĠĠĠĠĠĠĠ Ġremove Db Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġattach Database Read Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( registration Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregistration Ġ= Ġdatabase Reference !!. add Snapshot Listener Ġ{ Ġsnapshots : ĠQuery Snapshot ?, Ġe : ĠFirebase Fire store Exception ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" listen : error ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( snapshots Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( dc Ġin Ġsnapshots . document Changes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dc . type Ġ== ĠDocument Change . Type . AD DED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjo ke Ġ= Ġdc . document . toObject ( Jo ke :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Message Adapter !!. add ( jo ke ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( auth State Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Auth !!. remove Auth State Listener ( auth State Listener !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġremove Db Listener () ĊĠĠĠĠĠĠĠ Ġm Message Adapter !!. clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Db Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( registration Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġregistration !!. remove () ĊĠĠĠĠĠĠĠ Ġregistration Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġfirebase Auth !!. add Auth State Listener ( auth State Listener !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġmenu Inflater ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ tell _ jo ke , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sign _ out _ menu Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth UI . getInstance (). sign Out ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠNav Utils . navigate Up To ( this , Ġnew ĠIntent ( this , ĠRecipe List Activity . class )); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Utils . navigate Up From Same Task ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠRC _ SIGN _ IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ C ANCE LED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠTell Jo ke Activity :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAN ONY MO US Ġ= Ġ" anonymous " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ MSG _ LENGTH _ LIMIT Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRC _ SIGN _ IN Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠJ OK ES Ġ= Ġ" j okes " ĊĠĠĠ Ġ} Ċ }