package Ġcom . future . quote . ui . main Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . alibaba . android . ar outer . launcher . AR outer Ċ import Ġcom . f sh . common . base . Base Lazy Fragment Ċ import Ġcom . f sh . common . ext . On Item Touch EventListener Ċ import Ġcom . f sh . common . ext . RecyclerView ItemClickListener Ċ import Ġcom . f sh . common . ext . viewModel Of Ċ import Ġcom . f sh . common . model . AR outer Path Ċ import Ġcom . f sh . common . model . Instrument Info Ċ import Ġcom . f sh . common . provider . Main Service Ċ import Ġcom . f sh . common . util . AR outer Utils Ċ import Ġcom . f sh . common . util . Number Utils Ċ import Ġcom . f sh . common . util . O mit s Ċ import Ġcom . f sh . common . websocket . F WebSocket Ċ import Ġcom . future . quote . R Ċ import Ġcom . future . quote . service . Quote Info Mgr Ċ import Ġcom . future . quote . ui . future info . Future Info Activity Ċ import Ġcom . future . quote . view model . Quote List ViewModel Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . quote _ fragment _ quote _ list .* Ċ import Ġkotlinx . android . synt hetic . main . layout _ item _ quote . view .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġdev Fan Ċ Ġ* Ċ Ġ* Ġauthor : Ġdev Fan Ċ Ġ* Ġemail : Ġ Ġdev fan sh an @ gmail . com Ċ Ġ* Ġdate : Ġ 2 0 2 0 / 3 / 1 1 Ċ Ġ* Ġdescription : Ġ è¡Į æĥħ åĪĹè¡¨ çķĮéĿ¢ Ċ Ġ* Ċ Ġ*/ Ċ Ċ class ĠQuote List Fragment Ġ: ĠBase Lazy Fragment (), ĠI Content Fragment Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġadapter : ĠQuote Item Adapter Ġ= ĠQuote Item Adapter () ĊĠĠĠ Ġprivate Ġvar Ġins List : ĠArrayList < Instrument Info > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġins Map : ĠHashMap < String , ĠPair < Int , ĠInstrument Info >> Ġ= ĠHashMap ( 5 0 ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠQuote List ViewModel ĊĠĠĠ Ġprivate Ġval Ġdis pos ables : ĠComposite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġvar Ġis Can Update Date : Boolean Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġfun Ġlayout Res (): ĠInt Ġ= ĠR . layout . quote _ fragment _ quote _ list ĊĊĠĠĠ Ġoverride Ġfun Ġlazy Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Views () ĊĠĠĠĠĠĠĠ Ġinit Datas () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Visible () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Can Update Date Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġis Can Update Date Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġsubscribe Quote ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġquote _ list . item Animator Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdivider Item Decoration Ġ= ĠDiv ider Item Decoration ( require Context (), ĠLinearLayout . VERTICAL ) ĊĠĠĠĠĠĠĠ Ġquote _ list . addItem Decoration ( divider Item Decoration ) ĊĠĠĠĠĠĠĠ Ġquote _ list . add On Item Touch Listener ( RecyclerView ItemClickListener ( quote _ list , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOn Item Touch EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( position : ĠInt ) Ġ= Ġhandle Item Click ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Click ( position : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġquote _ list . add On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll StateChanged ( re cyclerView : ĠRecyclerView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Scroll StateChanged ( re cyclerView , ĠnewState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Can Update Date Ġ= ĠnewState Ġ== ĠRecyclerView . SCROLL _ STATE _ IDLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠRecyclerView . SCROLL _ STATE _ IDLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe Quote ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġquote _ list . adapter Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// è¡Į æĥħ åĪĹè¡¨ Item çĤ¹åĩ» å¤ĦçĲĨ ĊĠĠĠ Ġprivate Ġfun Ġhandle Item Click ( pos : Int ){ Ċ // ĠĠĠĠĠĠĠ Ġval Ġtrade Service Ġ= ĠA Router Utils . get Trade Service () Ċ // ĠĠĠĠĠĠĠ Ġtrade Service . set Trade Ins ( ins List [ pos ]) ĊĠĠĠĠĠĠĠ Ġ// æ²¡æľī çĻ»å½ķ å°± è·³è½¬ åĪ° çĻ»å½ķ çķĮéĿ¢ Ċ // ĠĠĠĠĠĠĠ Ġif (! trade Service . is Trading Login ()){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠA Router . getInstance () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ( AR outer Path . Page . PAGE _ TRA DE _ LOGIN ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigation ( context ) Ċ // ĠĠĠĠĠĠĠ Ġ} else { Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĩæį¢ åĪ° äº¤æĺĵ çķĮéĿ¢ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠA Router Utils . get Main Service () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Tab Page ( Main Service . PAGE _ TRA DE ) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFuture Info Activity . startActivity ( require Context (), ins List [ pos ]. id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Datas () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠviewModel Of < Quote List ViewModel >(). value ĊĠĠĠĠĠĠĠ Ġ// WebSocket è¿ŀæİ¥ çĬ¶æĢģ ĊĠĠĠĠĠĠĠ ĠviewModel . socket Status Event . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠF WebSocket . STATUS _ CONNECTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe Quote ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ// è¡Į æĥħ æķ°æį® ĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( viewModel . quote Data Event . subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĹè¡¨ æ»ļ åĬ¨ ä¸Ń ï¼Į ä¸į åĪ·æĸ° åĪĹè¡¨ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! is Can Update Date ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ subscribe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġins Map [ it . instrument _ id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pair Ġ!= Ġnull Ġ&& Ġquote _ list . scroll State Ġ== ĠRecyclerView . SCROLL _ STATE _ IDLE Ġ&& Ġ! quote _ list . is Comp uting Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Range Changed ( pair . first , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Quote ( is Sub : Boolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager : ĠLinearLayoutManager Ġ= Ġquote _ list . layout Manager Ġas ĠLinearLayoutManager ĊĠĠĠĠĠĠĠ Ġval ĠstartPosition Ġ= Ġlayout Manager . findFirst Comp let ely Visible Item Position () ĊĠĠĠĠĠĠĠ Ġval Ġend Position Ġ= Ġlayout Manager . find Last Comp let ely Visible Item Position () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġif ( start Position Ġ< Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Quote List Fragment "," from Ġindex Ġ$ start Position Ġless Ġzero , can 't Ġget Ġstart Ġposition ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġind IdList : ĠString Ġ= Ġ Ġins List . sub List ( start Position , Ġend Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (", "){ it . id } ĊĠĠĠĠĠĠĠ Ġif ( is Sub ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . subscribe Quote ( ind IdList ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . un Subscribe Quote ( ind IdList ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Switch Exchange ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġins List . clear () ĊĠĠĠĠĠĠĠ Ġins Map . clear () ĊĠĠĠĠĠĠĠ Ġins List . addAll ( Quote Info Mgr . mgr . get Exchange ( id ). get Instrument s ()) ĊĠĠĠĠĠĠĠ Ġins List . forEach Indexed Ġ{ Ġindex , Ġins Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġins Map [ ins . id ] Ġ= ĠPair ( index , Ġins ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ æĺ¯ WebSocket è¿ŀæİ¥ æĪĲåĬŁ ï¼Į å°± çĽ´æİ¥ å°Ĩ RecyclerView æ»ļ åĬ¨ åĪ° ç¬¬ä¸Ģ æĿ¡ ĊĠĠĠĠĠĠĠ Ġif (! viewModel . need Connect Socket ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquote _ list . post Delayed ({ subscribe Quote ( true )}, 3 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠQuote Item Adapter Ġ: ĠRecyclerView . Adapter < Quote Item >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠQuote Item Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠQuote Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( require Context ()). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . layout _ item _ quote , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġins List . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠQuote Item , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġins List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item . tv _ ins _ name . text Ġ= Ġins . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item . tv _ ins _ short _ id . text Ġ= Ġins . ctp Instrument Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquote Entity Ġ= ĠQuote Info Mgr . mgr . get Quote Entity ( ins . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Quote Text To TextView ( holder . item . tv _ ins _ price , quote Entity ?. last _ price , ins . price Tick ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Quote Text To TextView ( holder . item . tv _ ins _ pre _ set tlement , quote Entity ?. pre _ set tlement , ins . price Tick ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Quote Text To TextView ( holder . item . tv _ ins _ up down , quote Entity ?. up down , ins . price Tick ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Quote Text To TextView ( holder . item . tv _ ins _ up down _ ratio , quote Entity ?. up down _ ratio , ins . price Tick , false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Quote Text To TextView ( holder . item . tv _ ins _ vol , quote Entity ?. amount ," 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Quote Text To TextView ( holder . item . tv _ ins _ pre _ io , quote Entity ?. pre _ open _ interest , ins . price Tick ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquote TextColor Ġ= Ġquote Entity ?. quote TextColor Ġ?: ĠR . color . quote _ white ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item . tv _ ins _ price . setTextColor ( resources . getColor ( quote TextColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item . tv _ ins _ up down . setTextColor ( resources . getColor ( quote TextColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item . tv _ ins _ up down _ ratio . setTextColor ( resources . getColor ( quote TextColor )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset Quote Text To TextView ( textView : TextView , quote Property : String ?, price Tick : String ?, format : Boolean Ġ= Ġtrue ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¡Į æĥħ æ²¡æľī åıĳçĶŁ åıĺåĮĸ ï¼Į ä¸į åĪ·æĸ° TextView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( textView . text Ġ== Ġquote Property ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! O mit s . is O mit ( quote Property )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( format ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= ĠNumber Utils . format Num ( quote Property , price Tick ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġquote Property ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= ĠO mit s . O mit Price ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠQuote Item ( var Ġitem : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item )