package Ġcom . feb ers . uest c _ bbs . module . message . view Ċ Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġcom . feb ers . uest c _ bbs . My App Ċ import Ġcom . feb ers . uest c _ bbs . R Ċ import Ġcom . feb ers . uest c _ bbs . base .* Ċ import Ġcom . feb ers . uest c _ bbs . entity . PM Detail Bean Ċ import Ġcom . feb ers . uest c _ bbs . entity . PM Detail Bean . Body Bean . Pm List Bean Ċ import Ġcom . feb ers . uest c _ bbs . entity . P MS end Result Bean Ċ import Ġcom . feb ers . uest c _ bbs . module . message . contract . Message Contract Ċ import Ġcom . feb ers . uest c _ bbs . module . message . presenter . PM Detail Presenter Impl Ċ import Ġcom . feb ers . uest c _ bbs . utils . PM Time Utils Ċ import Ġcom . feb ers . uest c _ bbs . view . adapter . PM Detail Adapter Ċ import Ġcom . feb ers . uest c _ bbs . lib . emotion . Key Board Manager Ċ import Ġcom . feb ers . uest c _ bbs . lib . emotion . view . Em otion View Ċ import Ġkotlinx . android . synt hetic . main . activity _ private _ detail .* Ċ import Ġkotlinx . android . synt hetic . main . layout _ toolbar _ common .* Ċ import Ġorg . green robot . event bus . EventBus Ċ Ċ /** Ċ Ġ* Ġ ç§ģ ä¿¡ æ¶Īæģ¯ çļĦ è¯¦æĥħ Ċ Ġ* ĠéĢļè¿ĩ mvp æ¨¡å¼ı èİ·åıĸ åİĨåı² æ¶Īæģ¯ Ċ Ġ* Ġ å®ŀ æĹ¶ æĽ´æĸ° çķĮéĿ¢ ï¼Į èİ·åıĸ æľĢæĸ° æ¶Īæģ¯ ( æĹł æķĪ ) Ċ Ġ*/ Ċ class ĠPM Detail Activity Ġ: ĠBase Activity (), ĠMessage Contract . PM View Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpm List : ĠMutable List < Pm List Bean . Msg List Bean > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpm Presenter : ĠMessage Contract . P MP res enter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpm Adapter : ĠPM Detail Adapter ĊĠĠĠ Ġprivate Ġvar Ġis Message Loop Request Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar ĠuserName Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġpage Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġvar Ġuid Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġkeyboard Manager : ĠKey Board Manager ĊĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġ è¾ĵåħ¥ æ³ķ æĺ¯åĲ¦ æĺ¾ç¤º çļĦ æłĩ å¿Ĺ åıĺéĩı ĊĠĠĠĠĠĠĠ Ġå¦Ĥæŀľ è®¾ç½® æĸ° åĢ¼ ï¼Į è¯´æĺİ è¾ĵåħ¥ æ³ķ çĬ¶æĢģ æĶ¹åıĺ ĊĠĠĠĠĠĠĠ Ġ è°ĥçĶ¨ soft Input Status Change æĸ¹æ³ķ éĢļçŁ¥ è§ĨåĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġis Soft Input Show : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsoft Input Status Change () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Toolbar (): ĠToolbar ? Ġ= Ġtoolbar _ common ĊĊĠĠĠ Ġoverride Ġfun Ġset View (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġuid Ġ= Ġintent . getInt Extra ( USER _ ID , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠuserName Ġ= Ġintent . getString Extra ( USER _ NAME ) Ġ?: Ġ" ç§ģ ä¿¡ è¯¦æĥħ " ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . activity _ private _ detail ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). post ( Msg Feedback Event ( Base Code . SUCCESS , ĠMSG _ TYPE _ PRIVATE )) ĊĠĠĠĠĠĠĠ Ġtoolbar _ common . title Ġ= ĠuserName ĊĠĠĠĠĠĠĠ Ġpm Presenter Ġ= ĠPM Detail Presenter Impl ( this ) ĊĠĠĠĠĠĠĠ Ġpm Adapter Ġ= ĠPM Detail Adapter ( this , Ġpm List , ĠMy App . user (). uid , ĠPM Time Utils ()) ĊĠĠĠĠĠĠĠ Ġre cycler view _ private _ detail . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġpm Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget Pm List ( startTime Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġbtn _ pm _ send . setOnClickListener Ġ{ Ġsend PM Detail () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠéĢļè¿ĩ çĽĳåĲ¬ çĪ¶ å¸ĥå±Ģ çļĦ é«ĺåº¦ åıĺåĮĸ ï¼Į åĪ¤æĸŃ è¾ĵåħ¥ æ³ķ æĺ¯åĲ¦ å¼¹ åĩº ĊĠĠĠĠĠĠĠĠ Ġ* Ġæµ ĭ è¯ķ æľª å¼¹ åĩº æĹ¶ diff ä¸º 7 6 ï¼Į å¼¹ åĩº åĲİ ä¸º 8 2 7 ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åıĤèĢĥ Ġhttps :// blog . cs dn . net / aday abet ter / article / details / 7 8 8 1 9 1 8 3 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġcontent _ layout _ pm _ detail . view Tree Observer . add On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Height Ġ= Ġcontent _ layout _ pm _ detail . root View . height Ġ- Ġcontent _ layout _ pm _ detail . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// i (" PM ", Ġdiff Height . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diff Height Ġ>= Ġ 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Soft Input Show Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġloop Receive Message () ĊĠĠĠĠĠĠĠ Ġinit Em otion View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Em otion View () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( emotion _ view _ pm _ detail Ġas ĠEm otion View ). attach EditText ( edit _ view _ pm ) ĊĠĠĠĠĠĠĠ Ġkeyboard Manager Ġ= ĠKey Board Manager . with ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To Em otion Button ( btn _ emotion _ pm _ detail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Em otion View ( emotion _ view _ pm _ detail Ġas ĠEm otion View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To Lock Content ( content _ layout _ pm _ detail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Input Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å½ĵ it ä¸º true æĹ¶ è¾ĵåħ¥ æ³ķ å¼¹ åĩº ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Em otion Button OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Pm List ( startTime : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpm Presenter . pm Session Request ( uid Ġ= Ġuid , Ġpage Ġ= Ġpage , Ġbegin Time Ġ= ĠstartTime ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠéĢļè¿ĩ æĶ¹åıĺ startTime ï¼Į èİ·åıĸ æľįåĬ¡åĻ¨ è¿ĶåĽŀ çļĦ æľª è¯» æ¶Īæģ¯ ĊĠĠĠĠ Ġ* Ġ ä½Ĩæĺ¯ ç»ı è¿ĩ æµĭè¯ķ ï¼Į è¿ĺæĺ¯ ä¼ļ è¿ĶåĽŀ æīĢæľīçļĦ æ¶Īæģ¯ ĊĠĠĠĠ Ġ* Ġæ ļ Ĥ æĹ¶ ä¸į çĶ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġloop Receive Message () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġobject Ġ: ĠThread () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( is Message Loop Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Pm List ( startTime Ġ= ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep ( 3 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// t . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ æķ°æį® æĺ¾ç¤º åľ¨ çķĮéĿ¢ ä¸Ĭ ãĢĤ recyclerview è¦ģ ç§»åĬ¨ åĪ° åºķ éĥ¨ ï¼Į æ·»åĬł æĸ° æķ°æį® çļĦæĹ¶åĢĻ ä»İ åºķ éĥ¨ æ·»åĬł ï¼ļ ĊĠĠĠĠ Ġ* Ġpm Adapter . notify Item Inserted ( pm List . size - 1 ) ĊĠĠĠĠ Ġ* Ġä¸ĭ éĿ¢ ä¸Ģ åı¥ æİ§åĪ¶ è§ĨåĽ¾ çļĦ æ»ĳ åĬ¨ æĺ¯ æĹł æķĪ çļĦ ĊĠĠĠĠ Ġ* Ġre cycler view _ private _ detail . scrollTo Position ( pm List . size - 1 ) ĊĠĠĠĠ Ġ* ĠéľĢè¦ģ è°ĥçĶ¨ Ġscroll _ view _ pm . post Ġ{ ĊĠĠĠĠ Ġ* Ġscroll _ view _ pm . scrollTo ( 0 , Ġlinear _ layout _ pm _ content . meas ured Height ) Ġ} ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġshow P MS ession ( event : ĠBase Event < PM Detail Bean >) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . data . body ?. pm List ?. get ( 0 )?. msg List ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// i (" PM ", Ġ" size : Ġ${ it . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpm List . addAll ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpm Adapter . notify Item Inserted ( pm List . size - 1 ) ĊĠĠĠĠĠĠĠ Ġscroll View Scroll To Bottom () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend PM Detail () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġst Content : ĠString Ġ= Ġedit _ view _ pm ?. text . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( st Content . isEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġpm Presenter . pm Send Request ( st Content , Ġ" text ") ĊĠĠĠĠĠĠĠ Ġedit _ view _ pm . text ?. clear () ĊĠĠĠĠĠĠĠ Ġpm List . add ( Pm List Bean . Msg List Bean (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender Ġ= ĠMy App . user (). uid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġst Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" text " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= ĠSystem . currentTimeMillis (). toString () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow P MS end Result ( event : ĠBase Event < P MS end Result Bean >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpm Adapter . notify Item Inserted ( pm List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll View Scroll To Bottom () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsoft Input Status Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Soft Input Show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll View Scroll To Bottom () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ ScrollView æ»ĳ åĬ¨ èĩ³ åºķ éĥ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġscroll View Scroll To Bottom () Ġ= Ġscroll _ view _ pm . post Ġ{ ĊĠĠĠĠĠĠĠ Ġscroll _ view _ pm . scrollTo ( 0 , Ġlinear _ layout _ pm _ content . meas ured Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Error ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Message Loop Request Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Hint ( msg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġis Message Loop Request Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ