package Ġcom . example . con vers ate Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Message Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . con vers ate . model . Memo Ċ import Ġcom . example . con vers ate . model . User Ċ import Ġcom . example . con vers ate . utils . Constants Ċ import Ġcom . example . con vers ate . utils . Fire store Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Exception Ċ import Ġcom . google . firebase . firestore . Query Snapshot Ċ import Ġcom . google . firebase . firestore . k tx . firestore Ċ import Ġcom . google . firebase . firestore . k tx . toObject Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġkotlinx . android . synt hetic . main . activity _ chat .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ profile .* Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util .* Ċ Ċ class ĠChat Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmessages db Ġ= ĠFirebase . firestore . collection ( Constants . MESSAGES ) ĊĊĠĠĠ Ġprivate Ġval Ġusers db Ġ= ĠFirebase . firestore . collection ( Constants . USERS ) Ċ Ċ // ĠĠĠ Ġvar ĠcurrentUser : ĠUser Ġ= ĠUser ("", Ġ"", Ġ"", Ġ"") ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ chat ) ĊĊĊĊĠĠĠĠĠĠĠ Ġ// Prepare ĠSharedPreferences ĊĠĠĠĠĠĠĠ Ġval Ġshared Pref Ġ= Ġget SharedPreferences (" my Pref ", ĠContext . MODE _ PRIVATE ) ĊĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Pref . edit () ĊĊĠĠĠĠĠĠĠ Ġ// Get Ġactive ĠuserID Ġfrom ĠShared Prefs ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġshared Pref . getString ( Constants . LOG GED _ IN _ ID , Ġ" uid Hash ") !! ĊĊĠĠĠĠĠĠĠ Ġval Ġlogged Name Ġ= Ġshared Pref . getString ( Constants . LOG GED _ IN _ NAME , Ġ" null ") ĊĊĊĠĠĠĠĠĠĠ Ġeditor . apply { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Constants . LOG GED _ IN _ ID , ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠgetUser Object ( userId ) ĊĊĠĠĠĠĠĠĠ Ġsend _ card . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsdf Ġ= ĠSimpleDateFormat (" dd / MM / yyyy Ġhh : mm : ss ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= Ġsdf . format ( Date ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġmessage _ content . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmemo Ġ= ĠM emo ( Ġcontent , Ġlogged Name !! , Ġcurrent Date , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFire store (). sendMessage ( this , Ġmemo ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchat _ app bar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠCon versations Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsub cribe To Memo Updates () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsub cribe To Memo Updates (){ ĊĠĠĠĠĠĠĠ Ġval Ġshared Pref Ġ= Ġget SharedPreferences (" my Pref ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġval Ġlogged Name Ġ= Ġshared Pref . getString ( Constants . LOG GED _ IN _ NAME , Ġ" uid Hash ") !! ĊĠĠĠĠĠĠĠ Ġmessages db . add Snapshot Listener { query Snapshot : ĠQuery Snapshot ?, Ġerror : ĠFirebase Fire store Exception ? Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġerror . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmemo List Ġ= Ġmutable ListOf < Memo >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Snapshot ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( document Ġin Ġit ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmemo Ġ= Ġdocument . toObject < Memo >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemo List . add ( memo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemo List . sortBy Descending Ġ{ Ġit . datetime Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= ĠfindViewById < RecyclerView >( R . id . rv Messages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( this , ĠRecyclerView . VERTICAL , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠChat Adapter ( memo List , Ġlogged Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser Object ( userId : ĠString ){ ĊĊĠĠĠĠĠĠĠ Ġval Ġshared Pref Ġ= Ġget SharedPreferences (" my Pref ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Pref . edit () ĊĊĠĠĠĠĠĠĠ Ġusers db . document ( userId ). get (). add On Success Listener Ġ{ Ġdocument Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Constants . LOG GED _ IN _ NAME , Ġdocument . toObject ( User :: class . java ) !!. name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }