@ file : Suppress (" Member Visibility Can Be Private ") Ċ Ċ package Ġcom . j oker . emotion keyboard . keyboard Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . arch . lifecycle . Lifecycle Ċ import Ġandroid . arch . lifecycle . Lifecycle Observer Ċ import Ġandroid . arch . lifecycle . On Lifecycle Event Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . LinearLayout Compat Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroid . widget . EditText Ċ import Ġcom . j oker . emotion keyboard . R Ċ import Ġcom . j oker . emotion keyboard . keyboard . data . Em otion Group Type Ċ import Ġcom . j oker . emotion keyboard . keyboard . util . Em otion Util Ċ import Ġcom . j oker . emotion keyboard . keyboard . util . Util Ċ import Ġkotlinx . android . synt hetic . main . widget _ chat _ keyboard _ layout . view .* ĊĊ Ċ /** Ċ Ġ* ĠChat Key Board Ċ Ġ* Ċ Ġ* Ġ@ author Ġ Ġj oker Ċ Ġ* Ġ@ date ĠĠĠĠ 2 0 1 8 / 5 / 2 5 Ċ Ġ* Ġ@ since ĠĠĠ 1 . 0 Ċ Ġ*/ Ċ class ĠChat Key Board Ġ: ĠLinearLayout Compat , ĠCompound Button . On Checked ChangeListener , ĠText Watcher , ĠView . On Touch Listener , ĠView . On Key Listener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Chat Key Board " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSHARE _ PREFER ENCE _ NAME Ġ= Ġ" chat Key Board " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSHARE _ PREFER ENCE _ SOFT _ INPUT _ HEIGHT Ġ= Ġ" share _ preference _ soft _ input _ height " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġbind ContentView : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġactivity Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Ġas ĠAppCompatActivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinput Method Manager Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġshared Preference Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . get SharedPreferences ( SHARE _ PREFER ENCE _ NAME , ĠContext . MODE _ PRIVATE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠView . inflate ( context , ĠR . layout . widget _ chat _ keyboard _ layout , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġactivity . lifecycle . add Observer ( object Ġ: ĠLifecycle Observer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ PAUSE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fl Content Layout . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Content Height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Chat Key Board Content ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Em otion Group View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Add Group View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunlock Content Height Delayed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġemotion Group View . bind EditText ( et Message Key Board ) ĊĠĠĠĠĠĠĠ Ġet Message Key Board . setOn Touch Listener ( this ) ĊĠĠĠĠĠĠĠ Ġet Message Key Board . setOn Key Listener ( this ) ĊĠĠĠĠĠĠĠ Ġet Message Key Board . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġcb Add Key Board . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġcb Em otion Key Board . setOn Checked ChangeListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¼ĸè¾ĳ æ¡Ĩ èİ·åıĸ çĦ ¦ çĤ¹ ï¼Į å¹¶ æĺ¾ç¤º è½¯ä»¶ çĽĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Soft Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġet Message Key Board . request Focus () ĊĠĠĠĠĠĠĠ Ġet Message Key Board . post ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Method Manager . show Soft Input ( et Message Key Board , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Support Soft Input Height () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éļĲèĹı è½¯ä»¶ çĽĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhide Soft Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput Method Manager . hide Soft Input From Window ( et Message Key Board . window Token , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ è½¯ä»¶ çĽĺ çļĦ é«ĺåº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Support Soft Input Height (): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġdecor View æĺ¯ window ä¸ŃçļĦ æľĢ é¡¶ å±Ĥ view ï¼Į åı¯ä»¥ ä»İ window ä¸Ń éĢļè¿ĩ get Decor View èİ·åıĸ åĪ° decor View ãĢĤ ĊĠĠĠĠĠĠĠĠ Ġ* ĠéĢļè¿ĩ decor View èİ·åıĸ åĪ° ç¨ĭåºı æĺ¾ç¤º çļĦ åĮºåŁŁ ï¼Į åĮħæĭ¬ æłĩé¢ĺ æłı ï¼Į ä½Ĩ ä¸į åĮħæĭ¬ çĬ¶æĢģ æłı ãĢĤ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġactivity . window . decor View . getWindow Visible Display Frame ( r ) ĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ å±ı å¹ķ çļĦ é«ĺåº¦ ĊĠĠĠĠĠĠĠ Ġval Ġscreen Height Ġ= Ġactivity . window . decor View . root View . height ĊĠĠĠĠĠĠĠ Ġ// è®¡ç®Ĺ è½¯ä»¶ çĽĺ çļĦ é«ĺåº¦ ĊĠĠĠĠĠĠĠ Ġvar Ġsoft Input Height Ġ= Ġscreen Height Ġ- Ġr . bottom ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæ Ł Ĳ äºĽ Android çīĪæľ¬ ä¸ĭ ï¼Į æ²¡æľī æĺ¾ç¤º è½¯ éĶ® çĽĺ æĹ¶ åĩı åĩº æĿ¥çļĦ é«ĺåº¦ æĢ» æĺ¯ 1 4 4 ï¼Į èĢĮä¸įæĺ¯ éĽ¶ ï¼Į ĊĠĠĠĠĠĠĠĠ Ġ* Ġ è¿Ļæĺ¯ åĽłä¸º é«ĺåº¦ æĺ¯ åĮħæĭ¬ äºĨ èĻļæĭŁ æĮī éĶ® æłı çļĦ ( ä¾ĭå¦Ĥ åįİ ä¸º ç³»åĪĹ )ï¼Į æīĢä»¥ åľ¨ API ĠLevel é«ĺ äºİ 2 0 æĹ¶ ï¼Į ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æĪĳä»¬ éľĢè¦ģ åĩı åİ» åºķ éĥ¨ èĻļæĭŁ æĮī éĶ® æłı çļĦ é«ĺåº¦ ï¼Ī å¦Ĥæŀľ æľī çļĦè¯Ŀ ï¼ī ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( soft Input Height Ġ== Ġ 1 4 4 Ġ&& ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĠSDK ĠLevel Ġ>= Ġ 2 0 Ġ( Android ĠL ), Ġthe Ġsoft Input Height Ġwill Ġcontain Ġthe Ġheight Ġof Ġsoft Buttons Bar Ġ( if Ġhas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsoft Input Height Ġ-= Ġget Soft Buttons Bar Height () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( soft Input Height Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Em otion Keyboard -- Warning : Ġvalue Ġof Ġsoft Input Height Ġis Ġbelow Ġzero !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// åŃĺ ä¸Ģ ä»½ åĪ° æľ¬åľ° ĊĠĠĠĠĠĠĠ Ġif Ġ( soft Input Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preference . edit (). put Int ( SHARE _ PREFER ENCE _ SOFT _ INPUT _ HEIGHT , Ġsoft Input Height ). apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsoft Input Height ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åºķ éĥ¨ èĻļæĭŁ æĮī éĶ® æłı çļĦ é«ĺåº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) ĊĠĠĠ Ġprivate Ġfun Ġget Soft Buttons Bar Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġ// è¿Ļä¸ª æĸ¹æ³ķ èİ·åıĸ åı¯èĥ½ ä¸įæĺ¯ çľŁ å®ŀ å±ı å¹ķ çļĦ é«ĺåº¦ ĊĠĠĠĠĠĠĠ Ġactivity . window Manager . default Display . get Metrics ( metrics ) ĊĠĠĠĠĠĠĠ Ġval Ġusable Height Ġ= Ġmetrics . height Pixels ĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ å½ĵåīį å±ı å¹ķ çļĦ çľŁ å®ŀ é«ĺåº¦ ĊĠĠĠĠĠĠĠ Ġactivity . window Manager . default Display . get Real Metrics ( metrics ) ĊĠĠĠĠĠĠĠ Ġval Ġreal Height Ġ= Ġmetrics . height Pixels ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( real Height Ġ> Ġusable Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreal Height Ġ- Ġusable Height ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ æĺ¾ç¤º è½¯ä»¶ çĽĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Soft Input Shown (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Support Soft Input Height () Ġ!= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ è½¯ éĶ® çĽĺ é«ĺåº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Shared Key Board Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġshared Preference . getInt ( SHARE _ PREFER ENCE _ SOFT _ INPUT _ HEIGHT , ĠUtil . dp 2 px ( context , Ġ 2 8 2 F )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĳå®ļ å¸ĥå±Ģ éĺ² æŃ¢ è·³ éĹ ª ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbind ContentView ( view : ĠView ): ĠChat Key Board Ġ{ ĊĠĠĠĠĠĠĠ Ġbind ContentView Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĶģ å®ļ åĨħå®¹ é«ĺåº¦ ï¼Į éĺ² æŃ¢ è·³ éĹ ª ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġlock Content Height () Ġ{ ĊĠĠĠĠĠĠĠ Ġbind ContentView ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġit . layout Params Ġas ĠLinearLayout Compat . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġit . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . weight Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġunlock Content Height Delayed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bind ContentView Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind ContentView ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( layout Params Ġas ĠLinearLayout Compat . LayoutParams ). weight Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 L ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch ( v : ĠView , Ġevent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( v Ġ== Ġet Message Key Board Ġ&& Ġevent . action Ġ== ĠMotion Event . ACTION _ UP Ġ&& Ġfl Content Layout . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock Content Height () // æĺ¾ç¤º è½¯ä»¶ çĽĺ æĹ¶ ï¼Į éĶģ å®ļ åĨħå®¹ é«ĺåº¦ ï¼Į éĺ² æŃ¢ è·³ éĹ ª ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Chat Key Board Content ( true )// éļĲèĹı è¡¨ æĥħ å¸ĥå±Ģ ï¼Į æĺ¾ç¤º è½¯ä»¶ çĽĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Em otion Group View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Add Group View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è½¯ä»¶ çĽĺ æĺ¾ç¤º åĲİ ï¼Į éĩĬæĶ¾ åĨħå®¹ é«ĺåº¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Message Key Board . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunlock Content Height Delayed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 L ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon CheckedChanged ( button View : ĠCompound Button , Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( button View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcb Em otion Key Board Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Soft Input Shown ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Content Height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Em otion Group View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunlock Content Height Delayed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Em otion Group View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fl Content Layout . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Content Height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Chat Key Board Content ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Em otion Group View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunlock Content Height Delayed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcb Add Key Board Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Soft Input Shown ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Content Height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Add Group View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunlock Content Height Delayed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Add Group View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fl Content Layout . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Content Height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Chat Key Board Content ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Add Group View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunlock Content Height Delayed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĺ¾ç¤º èģ Ĭ å¤© éĶ® çĽĺ åĨħå®¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Chat Key Board Content () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsoft Input Height Ġ= Ġget Support Soft Input Height () ĊĠĠĠĠĠĠĠ Ġif Ġ( soft Input Height Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsoft Input Height Ġ= Ġget Shared Key Board Height () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Soft Input () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfl Content Layout . layout Params . height Ġ= Ġsoft Input Height ĊĠĠĠĠĠĠĠ Ġ// è§£åĨ³ åĩºçİ° è¡¨ æĥħ éĶ® çĽĺ Ġ è½¯ éĶ® çĽĺ è¿ĺ æ²¡ æĿ¥ å¾Ĺ åıĬ éļĲèĹı éĹ®é¢ĺ Ġ å¯¼èĩ´ è¡¨ æĥħ éĶ® çĽĺ åľ¨ è½¯ éĶ® çĽĺ ä¹ĭ ä¸Ĭ Ġ çĦ¶åĲİ èĲ½ ä¸ĭ éĹ®é¢ĺ ĊĠĠĠĠĠĠĠ Ġfl Content Layout . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfl Content Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ}, Ġ 2 0 0 L ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éļĲèĹı èģ Ĭ å¤© éĶ® çĽĺ åĨħå®¹ ĊĠĠĠĠ Ġ* Ġ@ param Ġshow Soft Ġæĺ¯åĲ¦ æĺ¾ç¤º è½¯ä»¶ çĽĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhide Chat Key Board Content ( show Soft : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fl Content Layout . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cb Em otion Key Board . isChecked Ġ&& Ġ! cb Add Key Board . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl Content Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Soft ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Soft Input () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĺ¾ç¤º è¡¨ æĥħ éĶ® çĽĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Em otion Group View () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Chat Key Board Content () ĊĠĠĠĠĠĠĠ Ġcb Em otion Key Board . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġemotion Group View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġhide Add Group View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éļĲèĹı è¡¨ æĥħ éĶ® çĽĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhide Em otion Group View () Ġ{ ĊĠĠĠĠĠĠĠ Ġcb Em otion Key Board . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġemotion Group View . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Key Board () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput Method Manager . hide Soft Input From Window ( emotion Group View . window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcb Em otion Key Board . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfl Content Layout . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĺ¾ç¤º å¢ŀåĬł éĶ® çĽĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Add Group View () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Chat Key Board Content () ĊĠĠĠĠĠĠĠ Ġcb Add Key Board . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfunction Group View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġhide Em otion Group View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Add Group View () Ġ{ ĊĠĠĠĠĠĠĠ Ġcb Add Key Board . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfunction Group View . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( s . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Send Key Board . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcb Add Key Board . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Send Key Board . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcb Add Key Board . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġon Key ( v : ĠView ?, ĠkeyCode : ĠInt , Ġevent : ĠKeyEvent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ DEL Ġ&& Ġevent ?. action Ġ== ĠKeyEvent . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( v Ġas ? ĠEditText )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . text ?. length Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Reference Label () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġon Chat Key Board Listener : ĠOn Chat Key Board Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġset On Chat Key Board Listener ( listener : ĠOn Chat Key Board Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Chat Key Board Listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġinit Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Chat Key Board Listener ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Send Key Board . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Send Click ( et Message Key Board ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemotion Group View . setOn Em otion ItemClickListener Ġ{ Ġemotion , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Em otion Item Click ( emotion , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemotion Group View . setOn Tab ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Em otion Tab Selected ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Group View . setOn Function ItemClickListener Ġ{ Ġemotion , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Function Item Click ( emotion , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® ç¼ĸè¾ĳ æ¡Ĩ å¼ķçĶ¨ æ¶Īæģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Ref rence Text ( char Sequence : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtv Ref rence Text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= ĠEm otion Util . get Em otion Content ( context , ĠEm otion Group Type . EM OT ION _ TYPE _ CLASS IC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Sequence ?. toString () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġtv Ref rence Text . text Ġ= Ġstr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å¼ķçĶ¨ æ¶Īæģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Ref rence Text (): ĠCharSequence ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtv Ref rence Text . text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ åĲ« æľī å¼ķçĶ¨ æ¶Īæģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Show Reference Text (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtv Ref rence Text . visibility Ġ== ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¸ ħ éĻ¤ ç¼ĸè¾ĳ æ¡Ĩ è¾ĵåħ¥ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear EditText () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Reference Label () ĊĠĠĠĠĠĠĠ Ġet Message Key Board . text . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Reference Label () Ġ{ ĊĠĠĠĠĠĠĠ Ġtv Ref rence Text . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġtv Ref rence Text . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} Ċ } Ċ