package Ġid . d tp rst y . ch att toy . main Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġid . d tp rst y . ch att toy . R Ċ import Ġid . d tp rst y . ch att toy . data . Message Ċ import Ġid . d tp rst y . ch att toy . data . UserInfo Ċ import Ġid . d tp rst y . ch att toy . login . Login Activity Ċ import Ġid . d tp rst y . ch att toy . main . adapter . Chat Adapter Ċ import Ġid . d tp rst y . ch att toy . main . view . I Chat Ċ import Ġid . d tp rst y . ch att toy . session . User Session Ċ import Ġid . d tp rst y . ch att toy . util . Session Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġorg . jetbrains . ank o . startActivity Ċ import Ġjava . util .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠI Chat Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" main " ĊĠĠĠ Ġprivate Ġvar Ġuser : ĠUserInfo ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĊĠĠĠ Ġprivate Ġvar Ġlist Chat : ĠMutable List < Message > Ġ= ĠArrayList () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter Chat : ĠChat Adapter ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit (){ ĊĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= Ġ" Chat To y " ĊĠĠĠĠĠĠĠ Ġtoolbar . setTitle TextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġuser Ġ= ĠUser Session . init Preferences ( this ). userInfo ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this )[ Main ViewModel :: class . java ] ĊĊĠĠĠĠĠĠĠ Ġshow Loading ( true ) ĊĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĠĠĠĠĠĠĠ ĠviewModel . getMessage ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView (){ ĊĠĠĠĠĠĠĠ Ġadapter Chat Ġ= ĠChat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Chat ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwith ( rv Chat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Fixed Size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ). apply Ġ{ Ġstack From End Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . adapter Ġ= Ġadapter Chat ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġaction (){ ĊĠĠĠĠĠĠĠ Ġbtn Send . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġet Message ?. text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSession . time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Ġ= ĠMessage () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat . userId Ġ= Ġuser ?. userId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat . message Ġ= Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat . date Ġ= Ġtime ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . sendMessage ( chat ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Message ?. setText ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item ?. itemId Ġ?: Ġ 0 Ġ== ĠR . id . menu _ logout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Session . init Preferences ( this ). clear () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity < Login Activity >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Message Com ing ( chat : ĠMessage ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Chat . add ( chat !! ) ĊĠĠĠĠĠĠĠ Ġadapter Chat . notify Item Inserted ( list Chat . last Index ) ĊĊĠĠĠĠĠĠĠ Ġif ( chat . userId Ġ!= Ġuser ?. userId ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getUser ( chat . userId !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . userInfo . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Chat . set Sender ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Message Update ( position : ĠInt , Ġchat : ĠMessage ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Chat [ position ] Ġ= Ġchat !! ĊĠĠĠĠĠĠĠ Ġadapter Chat . notify Item Changed ( position , Ġchat ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Message Deleted ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Chat . remove At ( position ) ĊĠĠĠĠĠĠĠ Ġadapter Chat . notify Item Removed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading ( state : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ