package Ġcn . edu . n uc . android lab . n uc library android . ui . me Pack Ċ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġcn . edu . n uc . android lab . n uc library android . R Ċ import Ġcn . edu . n uc . android lab . n uc library android . base Model . Base Fragment Ċ import Ġcn . edu . n uc . android lab . n uc library android . bean . Me Ċ import Ġcn . i wg ang . countdown view . Count down View Ċ import Ġcom . z hy . adapter . recyclerview . Multi ItemType Adapter Ċ import Ġcom . z hy . adapter . recyclerview . base . Item View Delegate Ċ import Ġcom . z hy . adapter . recyclerview . base . ViewHolder Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . fragment _ me .* Ċ import Ġjava . text . SimpleDateFormat Ċ Ċ /** Ċ Ġ* ĠMe Fragment Ċ Ġ* Ċ Ġ* ĠCreated Ġby ĠM ur phy SL Ġon Ġ 2 0 1 8 / 1 / 1 1 . Ċ Ġ*/ Ċ class ĠMe Fragment Ġ: ĠBase Fragment (){ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter Ġ: ĠMulti ItemType Adapter < Me > ĊĊĠĠĠ Ġprivate Ġval Ġdata Ġ= ĠArrayList < Me >() ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Me Fragment " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠMe Fragment Ġby Ġlazy ( mode Ġ= ĠLazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMe Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ") ĊĠĠĠĠĠĠĠ Ġval Ġsuffix Ġ= Ġformat . format ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġsuffix ) ĊĊĠĠĠĠĠĠĠ Ġval Ġt 1 Ġ= Ġsuffix Ġ+" Ġ 8 : 3 0 " ĊĠĠĠĠĠĠĠ Ġval Ġt 2 Ġ= Ġsuffix Ġ+ Ġ" Ġ 1 0 : 3 0 " ĊĠĠĠĠĠĠĠ Ġval Ġt 3 Ġ= Ġsuffix Ġ+ Ġ" Ġ 1 1 : 3 0 " ĊĠĠĠĠĠĠĠ Ġval Ġt 4 Ġ= Ġsuffix Ġ+ Ġ" Ġ 1 4 : 3 0 " ĊĠĠĠĠĠĠĠ Ġval Ġt 5 Ġ= Ġsuffix Ġ+" Ġ 1 6 : 3 0 " ĊĠĠĠĠĠĠĠ Ġval Ġt 6 Ġ= Ġsuffix Ġ+" Ġ 1 8 : 3 0 " ĊĠĠĠĠĠĠĠ Ġval Ġt 7 Ġ= Ġsuffix Ġ+ Ġ" Ġ 2 0 : 3 0 " ĊĊĠĠĠĠĠĠĠ Ġval Ġformat 2 Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ĠHH : mm ") ĊĊĠĠĠĠĠĠĠ Ġdata Ġ+= ĠMe ( 5 , Ġ" 1 åı· åŃ¦çĶŁ éĺħ è§Ī å®¤ ", Ġformat 2 . parse ( t 1 ). time , Ġformat 2 . parse ( t 2 ). time ) ĊĠĠĠĠĠĠĠ Ġdata Ġ+= ĠMe ( 5 , Ġ" 3 åı· åŃ¦çĶŁ éĺħ è§Ī å®¤ ", Ġformat 2 . parse ( t 2 ). time , Ġformat 2 . parse ( t 3 ). time ) ĊĠĠĠĠĠĠĠ Ġdata Ġ+= ĠMe ( 6 , Ġ" 5 åı· åŃ¦çĶŁ éĺħ è§Ī å®¤ ", Ġformat 2 . parse ( t 4 ). time , Ġformat 2 . parse ( t 5 ). time ) ĊĠĠĠĠĠĠĠ Ġdata Ġ+= ĠMe ( 7 , Ġ" 8 åı· åŃ¦çĶŁ éĺħ è§Ī å®¤ ", Ġformat 2 . parse ( t 5 ). time , Ġformat 2 . parse ( t 6 ). time ) ĊĠĠĠĠĠĠĠ Ġdata Ġ+= ĠMe ( 7 , Ġ" 1 0 åı· åŃ¦çĶŁ éĺħ è§Ī å®¤ ", Ġformat 2 . parse ( t 6 ). time , Ġformat 2 . parse ( t 7 ). time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Res Layout (): ĠInt Ġ= ĠR . layout . fragment _ me ĊĊĠĠĠ Ġoverride Ġfun Ġinit View ( root : ĠView ?, ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . setTitle (" ç¡®è®¤ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . setMessage (" æĺ¯åĲ¦ éĩĬæĶ¾ åº§ ä½į ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Positive Button (" ç¡®å®ļ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 , Ġp 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar ( fab , Ġ" å·² éĩĬæĶ¾ åº§ ä½į ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Negative Button (" åıĸæ¶Ī "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 , Ġp 1 Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlogic (){ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĊĠĠĠĠĠĠĠ Ġme _ recycler _ view . layout Manager Ġ= Ġlayout Manager ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠMulti ItemType Adapter ( context , Ġdata ) ĊĠĠĠĠĠĠĠ Ġadapter . addItem View Delegate ( Out Duration Item Del ag ate ( context )) ĊĠĠĠĠĠĠĠ Ġadapter . addItem View Delegate ( In Duration Item Del ag ate ( context )) ĊĊĠĠĠĠĠĠĠ Ġme _ recycler _ view . adapter Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Data ( stream Ġ: ĠObservable < Me > ){ ĊĠĠĠĠĠĠĠ Ġstream . subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data . add ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" GET ĠUSER ĠFAIL Ġ: Ġ$ error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar ( me _ recycler _ view , Ġerror . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" GET ĠUSER ĠSUCCESS ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠOut Duration Item Del ag ate ( private Ġval Ġcontext Ġ: ĠContext ) Ġ: ĠItem View Delegate < Me >{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem View Layout Id (): ĠInt Ġ= ĠR . layout . item _ app oint _ 1 ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( holder : ĠViewHolder ?, Ġt : ĠMe ?, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠSimpleDateFormat (" HH : mm ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= Ġformat . format ( t ?. start ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠendTime Ġ= Ġformat . format ( t ?. end ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setText ( R . id . start _ time , ĠstartTime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setText ( R . id . end _ time , ĠendTime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setText ( R . id . floor , Ġt ?. floor . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setText ( R . id . address , Ġt ?. name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOnClickListener ( R . id . card _ view ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( Intent ( context , ĠDetail Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ?: Log . i (" Me Fragment ", Ġ" OUT ĠD URATION ĠLOAD ĠFAIL ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis For ViewType ( item : ĠMe ?, Ġposition : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġitem ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . start Ġ> Ġnow Ġ|| Ġit . end Ġ< Ġnow ĊĠĠĠĠĠĠĠ Ġ} ?: return Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠIn Duration Item Del ag ate ( private Ġval Ġcontext Ġ: ĠContext ) Ġ: ĠItem View Delegate < Me >{ ĊĠĠĠ Ġoverride Ġfun ĠgetItem View Layout Id (): ĠInt Ġ= ĠR . layout . item _ app oint _ 2 ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( holder : ĠViewHolder ?, Ġt : ĠMe ?, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getView < Count down View >( R . id . count _ down ). start (( t ?. end !! Ġ- ĠSystem . currentTimeMillis ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setText ( R . id . floor , Ġt . floor . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setText ( R . id . address , Ġt . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOnClickListener ( R . id . card _ view ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( Intent ( context , ĠDetail Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ?: Log . i (" Me Fragment ", Ġ" IN ĠD URATION ĠLOAD ĠFAIL ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis For ViewType ( item : ĠMe ?, Ġposition : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġitem ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . start Ġ< Ġnow Ġ&& Ġit . end Ġ> Ġnow ĊĠĠĠĠĠĠĠ Ġ} ?: return Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ