package Ġcom . tri stan w iley . chat se . chat Ċ Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 7 . app . ActionBar Drawer Toggle Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . Toolbar Ċ import Ġandroid . text . InputType Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Context Theme Wrapper Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget .* Ċ import Ġcom . squareup . okhttp . Form Encoding Builder Ċ import Ġcom . squareup . okhttp . Request Ċ import Ġcom . tri stan w iley . chat se . App Ċ import Ġcom . tri stan w iley . chat se . R Ċ import Ġcom . tri stan w iley . chat se . about . About Activity Ċ import Ġcom . tri stan w iley . chat se . chat . adapters . Room Adapter Ċ import Ġcom . tri stan w iley . chat se . chat . service . Incoming Event Service Ċ import Ġcom . tri stan w iley . chat se . chat . service . Incoming Event Service Binder Ċ import Ġcom . tri stan w iley . chat se . login . Login Activity Ċ import Ġcom . tri stan w iley . chat se . network . Client Ċ import Ġcom . tri stan w iley . chat se . network . Client Manager Ċ import Ġcom . tri stan w iley . chat se . network . cookie . Persistent Cookie Store Ċ import Ġcom . tri stan w iley . chat se . views . Divider Item Decoration Ċ import Ġkotlinx . android . synt hetic . main . activity _ chat .* Ċ import Ġkotlinx . android . synt hetic . main . room _ nav _ header .* Ċ import Ġorg . jetbrains . ank o . default SharedPreferences Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġorg . jetbrains . ank o . ui Thread Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠChat Activity Ġis Ġthe Ġmain Ġactivity Ġthat Ġsets Ġthe ĠFragment Ġand ĠDraw er Ġlayouts Ċ Ġ* Ċ Ġ* Ġ@ property Ġservice Binder : ĠIncoming Event Service Binder Ġthat Ġis Ġused Ġto Ġload Ġrooms Ċ Ġ* Ġ@ property Ġso Room List : ĠA Ġlist Ġof Ġall Ġthe Ġrooms Ġthe Ġuser Ġis Ġcurrently Ġin Ġfor ĠStack Overflow Ċ Ġ* Ġ@ property Ġse Room List : ĠA Ġlist Ġof Ġall Ġthe Ġrooms Ġthe Ġuser Ġis Ġcurrently Ġin Ġfor ĠStack Exchange Ċ Ġ* Ġ@ property Ġf key : ĠThe Ġgl or ious Ġf key Ġused Ġto Ġauthenticate Ġrequests Ċ Ġ* Ġ@ property Ġso Room Adapter : ĠAdapter Ġfor ĠStack Overflow ĠRoom s Ġthe Ġuser Ġis Ġin Ċ Ġ* Ġ@ property Ġse Room Adapter : ĠAdapter Ġfor ĠStack Exchange ĠRoom s Ġthe Ġuser Ġis Ġin Ċ Ġ*/ Ċ class ĠChat Activity Ġ: ĠAppCompatActivity (), ĠService Connection Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġservice Binder : ĠIncoming Event Service Binder ĊĠĠĠ Ġprivate Ġval Ġso Room List Ġ= Ġarray ListOf < Room >() ĊĠĠĠ Ġprivate Ġval Ġse Room List Ġ= Ġarray ListOf < Room >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġf key : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġso Room Adapter : ĠRoom Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġse Room Adapter : ĠRoom Adapter ĊĠĠĠ Ġprivate Ġvar Ġis Bound Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġthis . set ContentView ( R . layout . activity _ chat ) Ċ Ċ /* ĠĠĠĠĠĠĠ Ġ// If Ġthe Ġuser Ġis Ġstill Ġlogged Ġin Ġthen Ġcontinue , Ġotherwise Ġlogout ĊĠĠĠĠĠĠĠ Ġif Ġ( default SharedPreferences . getBoolean ( App . PRE F _ HAS _ CRE DS , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthe Ġuser Ġcame Ġfrom Ġa Ġdeep Ġlink , Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . action Ġ== ĠIntent . ACTION _ VIEW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Check Ġif Ġit 's ĠSO Ġor ĠSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis SO Ġ= Ġintent . data . toString (). contains ( Client . SITE _ STACK _ OVER FLOW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get Ġroom Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroom Num Ġ= Ġintent . data . path . split ("/ ")[ 2 ]. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Figure Ġout Ġthe Ġsite Ġbased Ġon Ġis SO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsite Ġ= ĠClient . SITE _ STACK _ OVER FLOW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is SO Ġ&& Ġroom Num Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite Ġ= ĠClient . SITE _ STACK _ EX CHANGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Load Ġthe Ġsite Ġfrom Ġthe Ġdeep Ġlink ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Chat Fragment ( Chat Room ( site , Ġroom Num )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( application Context , ĠLogin Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ// Create Ġadapters Ġfor Ġcurrent Ġuser 's Ġrooms ĊĠĠĠĠĠĠĠ Ġso Room Adapter Ġ= ĠRoom Adapter ( Client . SITE _ STACK _ OVER FLOW , Ġso Room List , Ġthis ) ĊĠĠĠĠĠĠĠ Ġse Room Adapter Ġ= ĠRoom Adapter ( Client . SITE _ STACK _ EX CHANGE , Ġse Room List , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġ// Set Ġadapters Ġto ĠRe cycler Views Ġalong Ġwith ĠLayout Managers ĊĠĠĠĠĠĠĠ Ġstack overflow _ room _ list . addItem Decoration ( Divider Item Decoration ( this )) ĊĠĠĠĠĠĠĠ Ġstack overflow _ room _ list . adapter Ġ= Ġso Room Adapter ĊĠĠĠĠĠĠĠ Ġstack overflow _ room _ list . layout Manager Ġ= ĠLinearLayoutManager ( application Context , ĠLinearLayoutManager . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġstack exchange _ room _ list . addItem Decoration ( Divider Item Decoration ( this )) ĊĠĠĠĠĠĠĠ Ġstack exchange _ room _ list . adapter Ġ= Ġse Room Adapter ĊĠĠĠĠĠĠĠ Ġstack exchange _ room _ list . layout Manager Ġ= ĠLinearLayoutManager ( application Context , ĠLinearLayoutManager . VERTICAL , Ġfalse ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġ// Notify Ġdata Ġis Ġchanged Ċ // ĠĠĠĠĠĠĠ Ġso Room Adapter . notify DataSet Changed () Ċ // ĠĠĠĠĠĠĠ Ġse Room Adapter . notify DataSet Changed () ĊĊĠĠĠĠĠĠĠ Ġ// Set Ġtoolbar Ġas ĠSupport ActionBar ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= ĠfindViewById < Toolbar >( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġ// Color Ġthe Ġtoolbar Ġfor ĠStack Overflow Ġas Ġa Ġdefault ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. setBackground Drawable ( Color Drawable ( Context Compat . getColor ( application Context , ĠR . color . stackoverflow _ orange ))) ĊĊĠĠĠĠĠĠĠ Ġ// On Ġthe Ġtoggle Ġbutton Ġpressed Ġopen Ġthe ĠNavigation Drawer ĊĠĠĠĠĠĠĠ Ġval Ġtoggle Ġ= ĠAction Bar Drawer Toggle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġdrawer _ layout , Ġtoolbar , ĠR . string . navigation _ drawer _ open , ĠR . string . navigation _ drawer _ close ) ĊĠĠĠĠĠĠĠ Ġdrawer _ layout . add Drawer Listener ( toggle ) ĊĠĠĠĠĠĠĠ Ġtoggle . sync State () ĊĊĠĠĠĠĠĠĠ Ġ// Load Ġthe Ġuser Ġdata Ġfor Ġthe ĠNavigation Drawer Ġheader ĊĠĠĠĠĠĠĠ Ġload UserData () ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Intent Ġ= ĠIntent ( this , ĠIncoming Event Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġthis . bind Service ( service Intent , Ġthis , ĠContext . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠ Ġis Bound Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġto Ġload Ġuser Ġdata Ġand Ġset Ġit Ġto Ġthe ĠNavigation Drawer Ġheader ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload UserData () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserID Ġ= Ġdefault SharedPreferences . getInt (" SO ID ", Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġse ID Ġ= Ġdefault SharedPreferences . getInt (" SE ID ", Ġ- 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// Does Ġthe Ġuser Ġhave Ġa ĠSO Ġaccount ? ĠWhat Ġabout ĠSE ? ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserID Ġ!= Ġ- 1 Ġ-> Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠClient Manager . client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// chat . stackoverflow . com / users / thumbs /$ userID ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Result Ġ= ĠJSONObject ( response . body (). string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName . text Ġ= Ġjson Result . getString (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Email . text Ġ= Ġdefault SharedPreferences . getString (" email ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġse ID Ġ!= Ġ- 1 Ġ-> Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠClient Manager . client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// chat . stackoverflow . com / users / thumbs /$ userID ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Result Ġ= ĠJSONObject ( response . body (). string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName . text Ġ= Ġjson Result . getString (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Email . text Ġ= Ġdefault SharedPreferences . getString (" email ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLog . e (" Chat Activity ", Ġ" User id Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġnetwork Ġis Ġconnected Ġadd Ġthe Ġrooms Ġto Ġthe Ġdrawer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name , Ġbinder : ĠI Binder ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" on Service Connected ", Ġ" Service Ġconnect ") ĊĠĠĠĠĠĠĠ Ġservice Binder Ġ= Ġbinder Ġas ĠIncoming Event Service Binder ĊĊĠĠĠĠĠĠĠ Ġ// As ynchronously Ġadd Ġrooms Ġto Ġdrawer ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf key Ġ= Ġservice Binder . load Room ( Chat Room ( Client . SITE _ STACK _ OVER FLOW , Ġ 1 )). f key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Room sTo Drawer ( f key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Load Ġa Ġdefault Ġroom ĊĠĠĠĠĠĠĠ Ġload Chat Fragment ( Chat Room ( default SharedPreferences . getString (" last Room Site ", ĠClient . SITE _ STACK _ OVER FLOW ), Ġdefault SharedPreferences . getInt (" last Room Num ", Ġ 1 5 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġon Destroy Ġun bind Ġthe Ġbound ĠIncoming Event Service ĊĠĠĠĠ Ġ* ĠProt ect s Ġfrom Ġle aking . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Bound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun bind Service ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Bound Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! default SharedPreferences . getBoolean ( App . PRE F _ HAS _ CRE DS , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPersistent Cookie Store ( App . instance ). removeAll () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( application Context , ĠLogin Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOn Ġresume Ġre bind Ġthe Ġservice Ġto Ġlisten Ġfor Ġincoming Ġevents ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Bound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Intent Ġ= ĠIntent ( this , ĠIncoming Event Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . bind Service ( service Intent , Ġthis , ĠContext . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Bound Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġall Ġthe Ġrooms Ġthat Ġthe Ġuser Ġis Ġin Ġto Ġthe ĠNavigation Drawer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Room sTo Drawer ( f key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġso ID Ġ= Ġdefault SharedPreferences . getInt (" SO ID ", Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġso Room List . clear () ĊĠĠĠĠĠĠĠ Ġse Room List . clear () ĊĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthe Ġuser Ġhas Ġa ĠStack Overflow ĠID Ġthen Ġload Ġrooms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( so ID Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠClient Manager . client ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġso Chat Page Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("${ Client . SITE _ STACK _ OVER FLOW }/ users / thumbs /$ so ID ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( so Chat Page Request ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Data Ġ= Ġresponse . body (). string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w tf (" JSON ", Ġjson Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠJSONObject ( json Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Clear Ġall Ġthe Ġrooms Ġand Ġmake Ġthe Ġtext Ġvisible ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġso _ header _ text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack overflow _ room _ list . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// For Ġeach Ġroom , Ġcreate Ġa Ġroom Ġand Ġadd Ġit Ġto Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrooms Ġ= Ġresult . get JSONArray (" rooms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. ( rooms . length () Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroom Ġ= Ġrooms . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroom Name Ġ= Ġroom . getString (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroom Num Ġ= Ġroom . getLong (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Create Ġroom Ġand Ġadd Ġit Ġto Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Room ( Client . SITE _ STACK _ OVER FLOW , Ġroom Name , Ġroom Num , Ġ 0 , Ġf key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthe Ġrooms Ġare Ġempty Ġthen Ġremove Ġthe Ġlist Ġand Ġheader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rooms . length () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġso _ header _ text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack overflow _ room _ list . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġso _ header _ text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack overflow _ room _ list . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthe Ġuser Ġhas Ġa ĠStack Exchange ĠID Ġthen Ġload Ġrooms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġse ID Ġ= Ġdefault SharedPreferences . getInt (" SE ID ", Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( se ID Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠClient Manager . client ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġso Chat Page Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("${ Client . SITE _ STACK _ EX CHANGE }/ users / thumbs /$ se ID ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( so Chat Page Request ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Data Ġ= Ġresponse . body (). string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠJSONObject ( json Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse _ header _ text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack exchange _ room _ list . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// For Ġeach Ġroom , Ġcreate Ġa Ġroom Ġand Ġadd Ġit Ġto Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrooms Ġ= Ġresult . get JSONArray (" rooms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. ( rooms . length () Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroom Ġ= Ġrooms . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroom Name Ġ= Ġroom . getString (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroom Num Ġ= Ġroom . getLong (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Create Ġroom Ġand Ġadd Ġit Ġto Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Room ( Client . SITE _ STACK _ EX CHANGE , Ġroom Name , Ġroom Num , Ġ 0 , Ġf key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthe Ġrooms Ġare Ġempty Ġthen Ġremove Ġthe Ġlist Ġand Ġheader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rooms . length () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse _ header _ text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack exchange _ room _ list . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse _ header _ text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack exchange _ room _ list . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġroom Ġfrom Ġthe Ġinformation Ġwe Ġgot Ġin Ġadd Room sTo Drawer (), Ġbut Ġget Ġmore Ġinformation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Room ( site : ĠString , Ġroom Name : ĠString , Ġroom Num : ĠLong , Ġlast Active : ĠLong , Ġf key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( site Ġ== ĠClient . SITE _ STACK _ OVER FLOW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( so Room List . any Ġ{ Ġit . room ID Ġ== Ġroom Num Ġ}) Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( se Room List . any Ġ{ Ġit . room ID Ġ== Ġroom Num Ġ}) Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠClient Manager . client ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġso Chat Page Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ site / rooms / thumbs /$ room Num /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( so Chat Page Request ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Data Ġ= Ġresponse . body (). string () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject ( json Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get Ġdescription Ġfor Ġroom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġjson . getString (" description ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Is Ġthis Ġa Ġuser 's Ġfavorite ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Favorite Ġ= Ġjson . getBoolean (" is Favorite ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get Ġthe Ġroom 's Ġtags ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġjson . getString (" tags ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthis Ġis Ġfor ĠStack Overflow Ġthen Ġadd Ġit Ġto Ġthe ĠSO Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Other wise , Ġadd Ġit Ġto Ġthe ĠSE Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( site Ġ== ĠClient . SITE _ STACK _ OVER FLOW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġso Room List . add ( Room ( room Name , Ġroom Num , Ġdescription , Ġlast Active , Ġis Favorite , Ġtags , Ġf key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġso Room Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse Room List . add ( Room ( room Name , Ġroom Num , Ġdescription , Ġlast Active , Ġis Favorite , Ġtags , Ġf key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse Room Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Inf late Ġthe Ġmenu Ġfor Ġthe ĠToolbar ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ chat , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠManage Ġeach Ġmenu Ġitem Ġselected ĊĠĠĠĠ Ġ* ĠWith Ġsearch _ rooms Ġwe Ġallow Ġthe Ġuser Ġto Ġjoin Ġa Ġroom Ġby Ġid Ġ( event ually Ġsearch Ġfor Ġrooms ) ĊĠĠĠĠ Ġ* ĠWith Ġaction _ logout Ġwe Ġlog Ġout Ġof Ġthe Ġapp ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . search _ rooms Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Create Ġan ĠAlertDialog Ġto Ġjoin Ġa Ġroom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( Context Theme Wrapper ( this , ĠR . style . App Theme _ SO )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Join ĠRoom ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Create Ġa Ġlayout Ġto Ġset Ġas ĠDialog Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= ĠLinearLayout ( application Context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġorientation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl . orientation Ġ= ĠLinearLayout . VERTICAL ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get ĠD PI Ġso Ġwe Ġcan Ġadd Ġpadding Ġand Ġlook Ġnatural ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdpi Ġ= Ġapplication . resources . display Metrics . density . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl . set Padding (( 1 9 Ġ* Ġdpi ), Ġ( 5 Ġ* Ġdpi ), Ġ( 1 4 Ġ* Ġdpi ), Ġ( 5 Ġ* Ġdpi )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Input Ġfor Ġinput ting Ġroom ĠID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠEditText ( application Context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġhint , Ġinput Ġtype Ġas Ġa Ġnumber , Ġand Ġmatch Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . hint Ġ= Ġ" Enter ĠRoom ĠID " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . input Type Ġ= ĠInput Type . TYPE _ CLASS _ NUMBER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . layout Params Ġ= ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . MATCH _ PARENT , ĠLinearLayout . LayoutParams . MATCH _ PARENT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Add ĠEditText Ġto Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl . addView ( input ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Create Ġdropdown Ġto Ġchoose Ġwhich Ġsite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspinner Ġ= ĠSp inner ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . layout Params Ġ= ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . MATCH _ PARENT , ĠLinearLayout . LayoutParams . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspinner . adapter Ġ= ĠArray Adapter < String >( this , Ġandroid . R . layout . simple _ spinner _ dropdown _ item , Ġarray ListOf (" Stack Overflow ", Ġ" Stack Exchange ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsite Ġ= ĠClient . SITE _ STACK _ OVER FLOW ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Add Ġdropdown Ġto ĠView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl . addView ( spinner ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// On Ġdropdown Ġclick Ġset Ġthe Ġsite Ġas Ġthe Ġappropriate Ġsite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View <* >, Ġview : ĠView , Ġpos : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthe Ġfirst Ġitem Ġis Ġclicked , Ġset Ġthe Ġsite Ġas ĠSO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġsite Ġ= ĠClient . SITE _ STACK _ OVER FLOW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Other wise Ġset Ġto ĠSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġsite Ġ= ĠClient . SITE _ STACK _ EX CHANGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Default Ġas ĠStack Overflow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < out ĠAdapter > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite Ġ= ĠClient . SITE _ STACK _ OVER FLOW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġview Ġto Ġthe Ġlayout Ġbuilt Ġabove ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setView ( l ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Join Ġthe Ġroom Ġthe Ġuser Ġchose Ġand Ġload Ġit Ġinto Ġthe Ġcontainer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Positive Button (" Join ĠRoom ", Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Chat Fragment ( Chat Room ( site , Ġinput . text . toString (). toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Dismiss Ġthe Ġdialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Negative Button (" Cancel ", Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Dismiss Ġthe Ġdialog Ġand Ġcancel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Show Ġthe Ġdialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ about Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠAbout Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Logout Ġof Ġapp Ġby Ġclearing Ġall ĠSharedPreferences Ġand Ġloading Ġthe ĠLogin Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ logout Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault SharedPreferences . edit (). clear (). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// This Ġis Ġhandled Ġby Ġthe ĠChat Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . room _ information Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . room _ stars Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" Chat Activity ", Ġ" Service Ġdisconnect ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Load Ġthe Ġchat Ġfragment Ġby Ġcreating Ġit Ġand Ġadding Ġit ĊĠĠĠ Ġfun Ġload Chat Fragment ( room : ĠChat Room ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Chat Fragment ( create Chat Fragment ( room )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdefault SharedPreferences . edit (). putString (" last Room Site ", Ġroom . site ). put Int (" last Room Num ", Ġroom . num ). apply () ĊĠĠĠĠĠĠĠ Ġdrawer _ layout . close Draw ers () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Add Ġthe Ġfragment Ġby Ġreplacing Ġthe Ġcurrent Ġfragment Ġwith Ġthe Ġnew ĠChat Fragment ĊĠĠĠ Ġprivate Ġfun Ġadd Chat Fragment ( fragment : ĠChat Fragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . fragment Container , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit Allow ing State Loss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Create Ġthe ĠChat Fragment Ġby Ġjoining Ġroom Ġand Ġcreating Ġan Ġinstance Ġof Ġthe ĠChat Fragment ĊĠĠĠ Ġ@ Throws ( IOException :: class , ĠJSON Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcreate Chat Fragment ( room : ĠChat Room ): ĠChat Fragment Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroom Info Ġ= Ġservice Binder . load Room ( room ) ĊĠĠĠĠĠĠĠ Ġre join Favorite Rooms () ĊĠĠĠĠĠĠĠ Ġservice Binder . join Room ( room , Ġroom Info . f key ) ĊĠĠĠĠĠĠĠ Ġval Ġchat Fragment Ġ= ĠChat Fragment . create Instance ( room , Ġroom Info . name , Ġroom Info . f key ) ĊĠĠĠĠĠĠĠ Ġservice Binder . register Listener ( room , Ġchat Fragment ) ĊĊĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġtitle Ġand Ġcolor Ġof ĠToolbar Ġdepending Ġon Ġroom ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= Ġroom Info . name ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthe Ġroom Ġis Ġfor ĠStack Overflow Ġset Ġthe Ġcolor Ġorange , Ġotherwise ĠSE Ġis Ġblue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( room . site Ġ== ĠClient . SITE _ STACK _ OVER FLOW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. setBackground Drawable ( Color Drawable ( Context Compat . getColor ( application Context , ĠR . color . stackoverflow _ orange ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġmult it ask ing Ġcolor Ġto Ġorange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Task Description ( Activity Manager . Task Description ( Activity Manager . Task Description (). label , ĠActivity Manager . Task Description (). icon , ĠContext Compat . getColor ( application Context , ĠR . color . stackoverflow _ orange ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( room . site Ġ== ĠClient . SITE _ STACK _ EX CHANGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. setBackground Drawable ( Color Drawable ( Context Compat . getColor ( application Context , ĠR . color . stack exchange _ blue ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġmult it ask ing Ġcolor Ġto Ġblue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Task Description ( Activity Manager . Task Description ( Activity Manager . Task Description (). label , ĠActivity Manager . Task Description (). icon , ĠContext Compat . getColor ( application Context , ĠR . color . stack exchange _ blue ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġchat Fragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġto Ġre join Ġthe Ġuser 's Ġfavorite Ġrooms ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġre join Favorite Rooms () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠClient Manager . client ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get Ġthe Ġf key Ġto Ġmake Ġa Ġcall ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġso Room Info Ġ= Ġservice Binder . load Room ( Chat Room ( Client . SITE _ STACK _ OVER FLOW , Ġ 1 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Create Ġa Ġbody Ġand Ġadd Ġappropriate Ġparameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġso RequestBody Ġ= ĠForm Encoding Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" f key ", Ġso Room Info . f key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" immediate ", Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" quiet ", Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Add Ġbody Ġand Ġurl Ġand Ġbuild Ġcall ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġso Chat Page Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( Client . SITE _ STACK _ OVER FLOW Ġ+ Ġ"/ ch ats / join / favorite ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( so RequestBody ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Execute Ġcall ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . new Call ( so Chat Page Request ). execute () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Do Ġthe Ġsame Ġfor ĠStack Exchange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġse Room Info Ġ= Ġservice Binder . load Room ( Chat Room ( Client . SITE _ STACK _ EX CHANGE , Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġse RequestBody Ġ= ĠForm Encoding Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" f key ", Ġse Room Info . f key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" immediate ", Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" quiet ", Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġse Chat Page Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( Client . SITE _ STACK _ EX CHANGE Ġ+ Ġ"/ ch ats / join / favorite ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( se RequestBody ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . new Call ( se Chat Page Request ). execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // A Ġclass Ġfor Ġa Ġroom Ġwith Ġall Ġthe Ġthings Ġwe Ġget Ġfrom Ġ/ rooms / thumbs /{ id } Ċ data Ġclass ĠRoom ( val Ġname : ĠString , Ġval Ġroom ID : ĠLong , Ġval Ġdescription : ĠString , Ġval Ġlast Active : ĠLong ?, Ġvar Ġis Favorite : ĠBoolean , Ġval Ġtags : ĠString , Ġval Ġf key : ĠString )