package Ġcom . vm lo ft . develop . app . template . ui . room Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ Ċ import Ġcom . alibaba . android . ar outer . facade . annotation . Route Ċ import Ġcom . alibaba . android . ar outer . launcher . AR outer Ċ Ċ import Ġcom . dr ake et . mult it ype . Multi Type Adapter Ċ Ċ import Ġcom . vm lo ft . develop . app . template . R Ċ import Ġcom . vm lo ft . develop . app . template . common . CacheManager Ċ import Ġcom . vm lo ft . develop . app . template . common . Sign Manager Ċ import Ġcom . vm lo ft . develop . app . template . databinding . Activity Room List Binding Ċ import Ġcom . vm lo ft . develop . app . template . im . IM Manager Ċ import Ġcom . vm lo ft . develop . app . template . request . bean . Room Ċ import Ġcom . vm lo ft . develop . app . template . request . view model . Room ViewModel Ċ import Ġcom . vm lo ft . develop . app . template . router . App Router Ċ import Ġcom . vm lo ft . develop . library . base . B Item Delegate Ċ import Ġcom . vm lo ft . develop . library . base . BV MA ct ivity Ċ import Ġcom . vm lo ft . develop . library . base . B ViewModel Ċ import Ġcom . vm lo ft . develop . library . base . common . C Constants Ċ import Ġcom . vm lo ft . develop . library . base . router . C Router Ċ import Ġcom . vm lo ft . develop . library . request . RP aging Ċ import Ġcom . vm lo ft . develop . library . base . widget . Common Dialog Ċ import Ġcom . vm lo ft . develop . library . base . widget . decoration . St agger ed Item Decoration Ċ import Ġcom . vm lo ft . develop . library . tools . utils . VM Dim en Ċ Ċ import Ġorg . k oin . android x . view model . ext . android . get ViewModel ĊĊ Ċ /** Ċ Ġ* ĠCreate Ġon Ġl z an 1 3 Ġon Ġ 2 0 2 1 / 0 5 / 0 9 Ġ 1 0 : 1 0 Ċ Ġ* Ġ æĪ¿ éĹ´ åĪĹè¡¨ Ċ Ġ*/ Ċ @ Route ( path Ġ= ĠApp Router . app Room List ) Ċ class ĠRoom List Activity Ġ: ĠB V MA ct ivity < Activity Room List Binding , ĠRoom ViewModel >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġpage : ĠInt Ġ= ĠC Constants . default Page ĊĠĠĠ Ġprivate Ġvar Ġlimit : ĠInt Ġ= ĠC Constants . default Limit ĊĊĠĠĠ Ġ// Ġ éĢĤ éħį åĻ¨ ĊĠĠĠ Ġprivate Ġval Ġm Adapter Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĠMulti Type Adapter () Ġ} ĊĠĠĠ Ġprivate Ġval Ġm Items Ġ= ĠArrayList < Any >() ĊĠĠĠ Ġprivate Ġval Ġm LayoutManager Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĠSt agger ed Grid LayoutManager ( 2 , ĠSt agger ed Grid LayoutManager . VERTICAL ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit VB () Ġ= ĠActivity Room List Binding . inflate ( layout Inflater ) ĊĊĠĠĠ Ġoverride Ġfun Ġinit VM (): ĠRoom ViewModel Ġ= Ġget ViewModel () ĊĊĠĠĠ Ġoverride Ġfun Ġinit UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init UI () ĊĠĠĠĠĠĠĠ Ġset Top Title ( R . string . room _ list ) ĊĊĠĠĠĠĠĠĠ Ġm Binding . room List Add IV . setOnClickListener Ġ{ ĠC Router . go ( App Router . app Room Create ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠA Router . getInstance (). inject ( this ) ĊĊĠĠĠĠĠĠĠ Ġm ViewModel . room List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Adapter . register ( Item Room Delegate ( object Ġ: ĠB Item Delegate . B Item Listener < Room > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView , Ġdata : ĠRoom , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿Ľåħ¥ æĪ¿ éĹ´ ï¼Į è¿Ľè¡Į ä¸ĭ è®°å½ķ ï¼Į è¿ĻéĩĮ æĺ¯ åĬłåħ¥ åĪ« äºº åĪĽå»º çļĦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Manager . set Last Room ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIM Manager . go Chat Room ( data . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ})) ĊĊĠĠĠĠĠĠĠ Ġm Adapter . items Ġ= Ġm Items ĊĊĠĠĠĠĠĠĠ Ġm Binding . re cyclerView . layout Manager Ġ= Ġm LayoutManager ĊĠĠĠĠĠĠĠ Ġm Binding . re cyclerView . addItem Decoration ( St agger ed Item Decoration ( VM Dim en . dp 2 px ( 8 ))) ĊĠĠĠĠĠĠĠ Ġm Binding . re cyclerView . adapter Ġ= Ġm Adapter ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® ä¸ĭ æĭī åĪ·æĸ° ĊĠĠĠĠĠĠĠ Ġm Binding . refresh Layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . refresh Layout . set No More Data ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . room List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® åĬłè½½ æĽ´å¤ļ ĊĠĠĠĠĠĠĠ Ġm Binding . refresh Layout . setOn Load More Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . room List ( page ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæķ°æį® åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrefresh ( paging : ĠRP aging < Room >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( page Ġ== ĠC Constants . default Page ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Last Room () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ æĪ¿ éĹ´ ä¿¡æģ¯ ç¼ĵåŃĺ èµ·æĿ¥ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCache Manager . reset Room ( paging . data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Items . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Items . addAll ( paging . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ æĪ¿ éĹ´ ä¿¡æģ¯ ç¼ĵåŃĺ èµ·æĿ¥ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCache Manager . reset Room ( paging . data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġm Items . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġpaging . data . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Items . addAll ( paging . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . notify Item Range Inserted ( position , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( paging . current Count Ġ+ Ġpaging . page Ġ* Ġpaging . limit Ġ>= Ġpaging . total Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . refresh Layout . set No More Data ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ ç©º æĢģ æ£ĢæŁ¥ ĊĠĠĠĠĠĠĠ Ġcheck Empty Status () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç©º æĢģ æ£ĢæŁ¥ ĊĠĠĠĠ Ġ* Ġ@ param Ġtype ĠĠ 0 - é»ĺè®¤ æ£ĢæŁ¥ ç©º æĢģ Ġ 1 - è¯·æ±Ĥ å¤±è´¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Empty Status ( type : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Items . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Empty No Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Empty View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . refresh Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Empty Failed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Model Loading ( model : ĠB ViewModel . UI Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! model . isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . refresh Layout . finish Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . refresh Layout . finish Load More () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĵæŀľ åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Model Refresh ( model : ĠB ViewModel . UI Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( model . type Ġ== Ġ" destroy Room ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . éĶĢ æ¯ ģ çļĦè¯Ŀ æĬĬ ç¼ĵåŃĺ éĩĮ çļĦ æĪ¿ éĹ´ ä¿¡æģ¯ ä¹Ł è¦ģ åĪł æİī ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCache Manager . set Last Room ( null , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( model . type Ġ== Ġ" room List ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh ( model . data Ġas ĠRP aging < Room >) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Model Error ( model : ĠB ViewModel . UI Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Model Error ( model ) ĊĠĠĠĠĠĠĠ Ġcheck Empty Status ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æŁ¥ æľĢåĲİ ä¸Ģæ¬¡ åĬłåħ¥ çļĦ æĪ¿ éĹ´ ï¼Į å¦Ĥæŀľ æľī ç»Ļ çĶ¨æĪ· ä¸Ģä¸ª æıĲç¤º ï¼Į ç»§ç»Ń è¿Ľåħ¥ ï¼Į æĪĸèĢħ åıĸæ¶Ī ï¼Į åıĸæ¶Ī çļĦè¯Ŀ å¦Ĥæŀľ æĺ¯ èĩªå·± åĪĽå»º çļĦ è¿Ľè¡Į éĶĢ æ¯ ģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Last Room () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroom Ġ= ĠCache Manager . getLast Room () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġm Dialog Ġ= ĠCommon Dialog ( this ) ĊĠĠĠĠĠĠĠ Ġ( m Dialog Ġas ĠCommon Dialog ). let Ġ{ Ġdialog Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . back Dismiss Switch Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . touch Dismiss Switch Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . setContent ( R . string . room _ last _ crash _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Negative ( listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Room () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Positive ( listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIM Manager . go Chat Room ( room . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢĢåĩº æĪ¿ éĹ´ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġexit Room () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroom Ġ= ĠCache Manager . getLast Room () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠSign Manager . get Curr User () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġ// Ġæ£Ģ æŁ¥ ä¸ĭ æĺ¯ ä¸įæĺ¯ èĩªå·± åĪĽå»º çļĦ æĪ¿ éĹ´ ĊĠĠĠĠĠĠĠ Ġif Ġ( room . owner . id Ġ== Ġuser . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . destroy Room ( room . id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 . åıªæĺ¯ éĢĢåĩº ï¼Į ç½® ç©º ä¸ĭ æľĢåĲİ åĬłåħ¥ çļĦ æĪ¿ éĹ´ å°± å¥½ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCache Manager . set Last Room ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }