package Ġio . ag ora . u ikit . impl . chat Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġandroid . view .* Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroidx . annotation . Ui Thread Ċ import Ġandroidx . appcompat . widget . AppCompat EditText Ċ import Ġandroidx . appcompat . widget . AppCompat ImageView Ċ import Ġandroidx . appcompat . widget . AppCompat TextView Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġio . ag ora . edu context .* Ċ import Ġio . ag ora . u ic omp onent . Ui Widget Manager Ċ import Ġio . ag ora . u ikit . R Ċ import Ġio . ag ora . u ikit . component . Round Rect Button State Bg Ċ import Ġio . ag ora . u ikit . edu context . handlers . Chat Handler Ċ import Ġio . ag ora . u ikit . impl . Ag ora Abs Widget Ċ import Ġio . ag ora . u ikit . impl . chat . tabs .* Ċ import Ġjava . lang . Exception Ċ Ċ /** Ċ Ġ* ĠThis Ġwidget Ġcannot Ġbe Ġinstantiated Ġby Ġconstructors Ċ Ġ*/ Ċ class ĠA gor a UI Chat Window Ġ: ĠA gor a Abs Widget () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtag Ġ= Ġ" Ag ora UI Chat Window " ĊĠĠĠ Ġprivate Ġval Ġduration Ġ= Ġ 4 0 0 L ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġparent : ĠViewGroup ĊĠĠĠ Ġprivate Ġvar Ġwidth : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġheight : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġleft : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġtop : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġshadow : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ// ĠSpec ially Ġdesigned Ġto Ġavoid Ġre cycler Ġview Ġhaving Ġa Ġminus Ġheight ĊĠĠĠ Ġprivate Ġval ĠminHeight Ġ= Ġ 4 0 ĊĠĠĠ Ġprivate Ġval Ġelevation Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġun Read Count Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayout : ĠRelative Layout ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġunread Text : ĠAppCompat TextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclose Btn : ĠAppCompat ImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmute Btn : ĠAppCompat ImageView ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent Layout : ĠRelative Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtitle Layout : ĠRelative Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinput Layout : ĠRelative Layout ĊĊĠĠĠ Ġprivate Ġvar Ġtab Configs : ĠList < Chat Tab Config >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtab Layout : ĠTab Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Pager : ĠView Pager 2 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtab Manager : ĠTab Manager ĊĊĠĠĠ Ġprivate Ġvar Ġcontent Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcontent Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcontent Top Margin : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcontent Left Margin : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġhide Layout : ĠRelative Layout ĊĊĠĠĠ Ġprivate Ġvar Ġtitle Layout Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġinput Layout Height : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġhide Icon Size Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Volatile Ġprivate Ġvar Ġhidden Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġanimate Listener : ĠOn Chat Window Animate Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġedit : ĠAppCompat EditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsend Btn : ĠAppCompat TextView ĊĊĠĠĠ Ġprivate Ġval Ġchat Handler Ġ= Ġobject Ġ: ĠChat Handler () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Message ( item : ĠE du Context Chat Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Manager . addMessage ( Tab Type . Public , ĠA gor a UI Chat Item . from Context Item ( item )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Un read Messages ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Chat History ( history : ĠList < E du Context Chat Item >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Ag ora UI Chat Item >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhistory . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Ag ora UI Chat Item . from Context Item ( item )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Manager . addMessage List ( Tab Type . Public , Ġresult , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Conversation Message ( item : ĠE du Context Chat Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Manager . addMessage ( Tab Type . Private , ĠA gor a UI Chat Item . from Context Item ( item )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Conversation History ( history : ĠList < E du Context Chat Item >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Ag ora UI Chat Item >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhistory . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Ag ora UI Chat Item . from Context Item ( item )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Manager . addMessage List ( Tab Type . Private , Ġresult , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Chat Allowed ( allowed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmute Btn . post Ġ{ Ġmute Btn . is Activated Ġ= Ġ! allowed Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Chat ( allowed , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Chat Allowed ( allowed : ĠBoolean , ĠuserInfo : ĠE du Context UserInfo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator : ĠE du Context UserInfo ?, Ġlocal : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Chat ( null , Ġif Ġ( local ) Ġallowed Ġelse Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTemp or arily Ġrecord Ġcurrent Ġroom Ġinfo Ġand Ġis Ġmade Ġcompanion ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġfacilitate Ġall Ġtabs Ġto Ġaccess . ĊĠĠĠĠĠĠĠ Ġ// ĠIt Ġis Ġcurrently Ġused Ġto Ġrecord Ġread Ġmessage Ġids ĊĠĠĠĠĠĠĠ Ġvar Ġroom Info : ĠE du Context Room Info ? Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Tab Config ( tab Configs : ĠList < Chat Tab Config >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . tab Configs Ġ= Ġtab Configs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( parent : ĠViewGroup , Ġwidth : ĠInt , Ġheight : ĠInt , Ġleft : ĠInt , Ġtop : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . parent Ġ= Ġparent ĊĠĠĠĠĠĠĠ Ġthis . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġthis . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġthis . top Ġ= Ġtop ĊĠĠĠĠĠĠĠ Ġthis . left Ġ= Ġleft ĊĊĠĠĠĠĠĠĠ Ġshadow Ġ= Ġparent . context . resources . get Dimension Pixel Size ( R . dim en . shadow _ width ) ĊĠĠĠĠĠĠĠ Ġhide Icon Size Ġ= Ġparent . context . resources . get Dimension Pixel Size ( R . dim en . ag ora _ message _ hide _ icon _ size ) ĊĠĠĠĠĠĠĠ Ġroom Info Ġ= Ġget E du Context ()?. room Context ()?. room Info () ĊĊĠĠĠĠĠĠĠ Ġlayout Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . ag ora _ chat _ layout , Ġparent , Ġfalse ) Ġas ĠRelative Layout ĊĊĠĠĠĠĠĠĠ Ġunread Text Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ unread _ text ) ĊĠĠĠĠĠĠĠ Ġclose Btn Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ icon _ close ) ĊĠĠĠĠĠĠĠ Ġmute Btn Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ mute _ icon ) ĊĊĠĠĠĠĠĠĠ Ġcontent Layout Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ layout ) ĊĠĠĠĠĠĠĠ Ġtitle Layout Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ title _ layout ) ĊĠĠĠĠĠĠĠ Ġinput Layout Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ input _ layout ) ĊĊĠĠĠĠĠĠĠ Ġtab Layout Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ tabs ) ĊĠĠĠĠĠĠĠ Ġview Pager Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ view _ pager ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( tab Configs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Manager Ġ= ĠTab Manager ( tab Layout , Ġtab Configs !! , Ġview Pager , Ġget E du Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOn Tab Selected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Input Method State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Manager . setCurrent ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( tag , Ġ" Tab Ġconfigs Ġhave Ġnot Ġbeen Ġinitialized Ġbefore Ġtab Ġis Ġcreated ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġunread Text . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġcontent Layout . clip To Outline Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcontent Layout . elevation Ġ= Ġelevation . toFloat () ĊĠĠĠĠĠĠĠ Ġvar Ġparams Ġ= Ġcontent Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠ Ġparams . set Margins ( shadow , Ġshadow , Ġshadow , Ġshadow ) ĊĠĠĠĠĠĠĠ Ġcontent Left Margin Ġ= Ġparams . left Margin ĊĠĠĠĠĠĠĠ Ġcontent Top Margin Ġ= Ġparams . top Margin ĊĠĠĠĠĠĠĠ Ġcontent Width Ġ= Ġwidth Ġ- Ġcontent Left Margin Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġcontent Height Ġ= Ġheight Ġ- Ġcontent Top Margin Ġ* Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġparent . addView ( layout , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġparams Ġ= Ġlayout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġtop ĊĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġleft ĊĠĠĠĠĠĠĠ Ġlayout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠ Ġtitle Layout Height Ġ= Ġ( title Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ). height ĊĠĠĠĠĠĠĠ Ġinput Layout Height Ġ= Ġ( input Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ). height ĊĊĠĠĠĠĠĠĠ Ġedit Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ message _ edit ) ĊĠĠĠĠĠĠĠ Ġedit . setOn Key Listener Ġ{ Ġview , ĠkeyCode , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Key Listener Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ ENTER Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . action Ġ== ĠKeyEvent . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Send Click ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsend Btn Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ send _ btn ) ĊĠĠĠĠĠĠĠ Ġsend Btn . setTextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġsend Btn . background Ġ= ĠRound Rect Button State Bg ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . resources . get Dimension Pixel Size ( R . dim en . ag ora _ message _ send _ btn _ width ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . resources . get Dimension Pixel Size ( R . dim en . ag ora _ message _ send _ btn _ height ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . resources . getColor ( R . color . theme _ blue _ light ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . resources . getColor ( R . color . theme _ blue _ light ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . resources . getColor ( R . color . theme _ blue _ gray ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . resources . getColor ( R . color . theme _ blue _ gray ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . resources . getColor ( R . color . theme _ disable ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . resources . getColor ( R . color . theme _ disable ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . resources . get Dimension Pixel Size ( R . dim en . stroke _ small )) ĊĊĠĠĠĠĠĠĠ Ġsend Btn . setOnClickListener Ġ{ Ġon Send Click ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġclose Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset C losable ( true ) ĊĊĠĠĠĠĠĠĠ Ġhide Layout Ġ= Ġlayout . findViewById ( R . id . ag ora _ chat _ hide _ icon _ layout ) ĊĠĠĠĠĠĠĠ Ġhide Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġhide Layout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget E du Context ()?. chat Context ()?. add Handler ( chat Handler ) ĊĠĠĠĠĠĠĠ Ġget Widget Manager ()?. addWidget ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Send Click ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġedit . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( content )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġedit . setText ("") ĊĠĠĠĠĠĠĠ Ġget Container ()?. hide Soft Input ( parent . context , Ġview ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġsend And Insert Local Chat ( content , Ġtimestamp , Ġtab Manager . getCurrent Tab ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend And Insert Local Chat ( message : ĠString , Ġtimestamp : ĠLong , Ġtab : ĠChat Tab Base ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Local Chat ( message , Ġtimestamp , Ġtab )?. let Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab ?. on Send Local Chat ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Local Chat ( message : ĠString , Ġtimestamp : ĠLong , Ġtab : ĠChat Tab Base ?) Ġ: ĠA gor a UI Chat Item ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġwhen Ġ( tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPublic Chat Tab Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget E du Context ()?. chat Context ()?. send Local Channel Message ( message , Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠE du Context Callback < E du Context Chat Item Send Result > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( target : ĠE du Context Chat Item Send Result ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ?. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . on Send Result ( result . from UserId , Ġresult . message Id , Ġresult . timestamp , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠE du Context Error ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . on Send Result ("", Ġ"", Ġtimestamp , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPrivate Chat Tab Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget E du Context ()?. chat Context ()?. send Conversation Message ( message , Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠE du Context Callback < E du Context Chat Item Send Result > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( target : ĠE du Context Chat Item Send Result ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ?. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . on Send Result ( result . from UserId , Ġresult . message Id , Ġtimestamp , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( error : ĠE du Context Error ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . on Send Result ("", Ġ"", Ġtimestamp , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġitem ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA gor a UI Chat Item . from Context Item ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Animate () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Layout . animate (). set Duration ( duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( De cel erate Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Layout . height Ġ<= ĠminHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Update Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction Ġ= Ġit . animated Fraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Width Ġ= Ġcontent Width Ġ* Ġfraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Height Ġ= Ġcontent Height Ġ* Ġfraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġcontent Width Ġ- Ġdiff Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġcontent Height Ġ- Ġdiff Height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparams Ġ= Ġcontent Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġwidth . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġheight . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġdiff Width . toInt () Ġ+ Ġcontent Left Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġdiff Height . toInt () Ġ+ Ġcontent Top Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Listener ?. on Chat Window Animate ( false , Ġfraction , Ġparams . left Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin , Ġparams . width , Ġparams . height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġtitle Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġ( title Layout Height Ġ* Ġ( 1 Ġ- Ġfraction )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġinput Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġ( input Layout Height Ġ* Ġ( 1 Ġ- Ġfraction )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Layout . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Start Action Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġlayout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġhide Icon Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġhide Icon Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġthis . left Ġ+ Ġthis . width Ġ- Ġhide Icon Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġthis . top Ġ+ Ġthis . height Ġ- Ġhide Icon Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunread Text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Animate () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Layout . animate (). set Duration ( duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( De cel erate Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction Ġ= Ġit . animated Fraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Width Ġ= Ġcontent Width Ġ* Ġfraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Height Ġ= Ġcontent Height Ġ* Ġfraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġcontent Width Ġ- Ġdiff Width Ġ+ Ġcontent Left Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġcontent Height Ġ- Ġdiff Height Ġ+ Ġcontent Top Margin ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diff Height Ġ<= ĠminHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Update Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparams Ġ= Ġcontent Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġdiff Width . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġdiff Height . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġleft . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġtop . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Listener ?. on Chat Window Animate ( true , Ġfraction , Ġparams . left Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin , Ġparams . width , Ġparams . height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġtitle Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġ( title Layout Height Ġ* Ġfraction ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġinput Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġ( input Layout Height Ġ* Ġfraction ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Layout . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Start Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġlayout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Read Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDirect ly Ġshow Ġthe Ġchat Ġwindow , Ġand Ġdisplay Ġthe Ġlast Ġitem ĊĠĠĠĠ Ġ* Ġof Ġthe Ġchat Ġlist ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow ( show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparams Ġ= Ġcontent Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġcontent Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġcontent Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġcontent Left Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġcontent Top Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġlayout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġtitle Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġtitle Layout Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġinput Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġinput Layout Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparams Ġ= Ġcontent Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= ĠminHeight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġcontent Left Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġcontent Top Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġlayout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġhide Icon Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġhide Icon Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġthis . left Ġ+ Ġthis . width Ġ- Ġhide Icon Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġthis . top Ġ+ Ġthis . height Ġ- Ġhide Icon Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġtitle Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġinput Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Layout . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un Read Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunread Text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Un read Messages ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunread Text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġprivate Ġfun Ġshow Un read Messages ( add : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġunread Text . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( add ) Ġun Read Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unread Text . visibility Ġ== ĠView . GONE ) Ġunread Text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunread Text . text Ġ= Ġif Ġ( un Read Count Ġ> Ġ 9 9 ) Ġ" 9 9 +" Ġelse Ġun Read Count . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġfun Ġallow Chat ( group : ĠBoolean ?, Ġlocal : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtab Manager . allow Chat ( group , Ġlocal ) ĊĠĠĠĠĠĠĠ Ġreset Input Method State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Input Method State () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġallow Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtab Manager . getCurrent Tab ()?. let Ġ{ Ġtab Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Ġ= Ġtab . chat Allowed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsend Btn . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Btn . isEnabled Ġ= Ġallow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit . isEnabled Ġ= Ġallow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit . hint Ġ= Ġedit . context . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( allow ) ĠR . string . ag ora _ message _ input _ hint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠR . string . ag ora _ message _ student _ chat _ mute _ hint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Shadow ( show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . elevation Ġ= Ġshadow . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcontent Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . set Margins ( shadow , Ġshadow , Ġshadow , Ġshadow ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Left Margin Ġ= Ġparams . left Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Top Margin Ġ= Ġparams . top Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Width Ġ= Ġwidth Ġ- Ġcontent Left Margin Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Height Ġ= Ġheight Ġ- Ġcontent Top Margin Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . setBackground Resource ( R . drawable . ag ora _ class _ room _ round _ rect _ bg ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . elevation Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcontent Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . set Margins ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Left Margin Ġ= Ġparams . left Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Top Margin Ġ= Ġparams . top Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Width Ġ= Ġwidth Ġ- Ġcontent Left Margin Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Height Ġ= Ġheight Ġ- Ġcontent Top Margin Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . setBackground Resource ( R . drawable . ag ora _ class _ room _ round _ rect _ stroke _ bg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fullscreen Rect ( full Screen : ĠBoolean , Ġrect : ĠRect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Rect ( rect ) ĊĊĠĠĠĠĠĠĠ Ġlayout . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( full Screen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcontent Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= ĠminHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcontent Layout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġcontent Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġcontent Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġcontent Top Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġcontent Left Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Rect ( rect : ĠRect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġlayout . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . top Margin Ġ= Ġrect . top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . left Margin Ġ= Ġrect . left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġrect . right Ġ- Ġrect . left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġrect . bottom Ġ- Ġrect . top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreceive ( from Comp Id : ĠString , Ġcmd : ĠString , Ġvar arg : ĠAny ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Widget Manager ()?. remove Widget ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠCalled Ġwhen Ġthe Ġsize Ġof Ġun fold Ġchat Ġwindow Ġis Ġchanged ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Full Display Rect ( rect : ĠRect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . width Ġ= Ġrect . width () ĊĠĠĠĠĠĠĠ Ġthis . height Ġ= Ġrect . height () ĊĠĠĠĠĠĠĠ Ġthis . content Width Ġ= Ġwidth Ġ- Ġshadow Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġthis . content Height Ġ= Ġheight Ġ- Ġshadow Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġthis . left Ġ= Ġrect . left ĊĠĠĠĠĠĠĠ Ġthis . top Ġ= Ġrect . top ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġfun Ġset C losable ( clo s able : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclose Btn . visibility Ġ= Ġif Ġ( clo s able ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Animate Listener ( listener : ĠOn Chat Window Animate Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . animate Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Showing (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! hidden ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠOn Chat Window Animate Listener Ġ{ ĊĠĠĠ Ġfun Ġon Chat Window Animate ( en large : ĠBoolean , Ġfraction : ĠFloat , Ġleft : ĠInt , Ġtop : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ċ }