package Ġcom . chen . new splash . favorite activity Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . app . Activity Options Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Message Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroidx . appcompat . app . ActionBar Ċ import Ġandroidx . appcompat . app . AppCompatActivity ; Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . recyclerview . widget . Default Item Animator Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . chen . new splash . New Splash Ċ import Ġcom . chen . new splash . R Ċ import Ġcom . chen . new splash . databinding . Activity Favorite Binding Ċ import Ġcom . chen . new splash . favorite activity . adapter . Favorite Item Ċ import Ġcom . chen . new splash . favorite activity . databinding . Favorite Activity ViewModel Ċ import Ġcom . chen . new splash . main activity . adapter . Photo Item Ċ import Ġcom . chen . new splash . models . photos . Photo Ċ import Ġcom . chen . new splash . photo activity . Photo Activity Ċ import Ġcom . chen . new splash . utils . Const Ċ import Ġcom . chen . new splash . utils . Loading State Ċ import Ġcom . chen . new splash . utils . Log Util Ċ import Ġcom . chen . new splash . utils . Utils Ċ import Ġcom . mike pen z . fast adapter . Fast Adapter Ċ import Ġcom . mike pen z . fast adapter . Generic Fast Adapter Ċ import Ġcom . mike pen z . fast adapter . I Item Ċ import Ġcom . mike pen z . fast adapter . adapters . Generic Item Adapter Ċ import Ġcom . mike pen z . fast adapter . scroll . End less Recycler On Scroll Listener Ċ import Ġcom . mike pen z . fast adapter . swipe . Simple Swipe Callback Ċ import Ġcom . mike pen z . fast adapter . ui . items . Progress Item Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ import Ġkotlinx . android . synt hetic . main . activity _ favorite . toolbar Ċ Ċ class ĠF avorite Activity Ġ: ĠAppCompatActivity (), ĠSimple Swipe Callback . Item Swipe Callback Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġbinding : Activity Favorite Binding ĊĠĠĠ Ġlateinit Ġvar Ġdata : Favorite Activity ViewModel ĊĠĠĠ Ġvar Ġaction Bar : ĠAction Bar ?= null ĊĠĠĠ Ġlateinit Ġvar Ġrv Main : RecyclerView ĊĠĠĠ Ġval Ġitem Adapter Ġ= ĠGeneric Item Adapter () ĊĠĠĠ Ġval Ġfooter Adapter Ġ= ĠGeneric Item Adapter () ĊĠĠĠ Ġval Ġfast Adapter Ġ: ĠGeneric Fast Adapter = ĠFast Adapter . with ( mutable ListOf ( item Adapter , footer Adapter )) ĊĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , R . layout . activity _ favorite ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠViewModel Providers . of ( this ). get ( Favorite Activity ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġbinding . data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġconfig Toolbar () ĊĠĠĠĠĠĠĠ Ġconfig Main () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġload () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfig Main () Ġ{ ĊĠĠĠĠĠĠĠ Ġrv Main Ġ= Ġbinding . main ĊĠĠĠĠĠĠĠ Ġrv Main . layout Manager Ġ= ĠLinearLayoutManager ( this , RecyclerView . VERTICAL , false ) ĊĠĠĠĠĠĠĠ Ġrv Main . setItem View Cache Size ( 5 ) ĊĠĠĠĠĠĠĠ Ġrv Main . add On Scroll Listener ( object Ġ: ĠEnd less Recycler On Scroll Listener ( footer Adapter ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad More ( currentPage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNew Splash . handler !!. post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfooter Adapter . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Item Ġ= ĠProgress Item () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Item . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfooter Adapter . add ( progress Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Swipe Load () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġfast Adapter . on ClickListener Ġ= Ġ{ v , Ġadapter , Ġitem , Ġposition -> Ġon Photo Click ( item , position ); true } ĊĠĠĠĠĠĠĠ Ġrv Main . adapter Ġ= Ġfast Adapter ĊĠĠĠĠĠĠĠ Ġrv Main . item Animator ?. change Duration Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtouch Callback Ġ= ĠSimple Swipe Callback ( this , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( R . drawable . ic _ delete _ fore ver _ black _ 2 4 dp ), Item Touch Helper . LEFT , Color . RED ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġtouch Helper Ġ= ĠItem Touch Helper ( touch Callback ) ĊĠĠĠĠĠĠĠ Ġtouch Helper . attach To RecyclerView ( rv Main ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġitem Sw ip ed ( position : ĠInt , Ġdirection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" åĪłéĻ¤ ${ position }") ĊĠĠĠĠĠĠĠ ĠNew Splash . db Photo !!. get Favorite () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. delete Photo ByID (( item Adapter . get Adapter Item ( position ) Ġas ĠF avorite Item ). photo . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠ Ġitem Adapter . remove ( position ) ĊĠĠĠĠĠĠĠ Ġfast Adapter . notify Adapter Item Removed ( position ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġon Photo Click ( item : ĠI Item < out ĠRecyclerView . ViewHolder >, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( item Ġis ĠF avorite Item ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . iv . transition Name Ġ= ĠgetString ( R . string . shared _ photo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= ĠIntent ( this , ĠPhoto Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( Const . ARG _ PH OTO , item . photo ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġup Swipe Load () Ġ{ ĊĠĠĠĠĠĠĠ Ġoffset += 1 0 ĊĠĠĠĠĠĠĠ Ġload () ĊĠĠĠ Ġ} ĊĠĠĠ Ġlateinit Ġvar Ġquery Disposable : Disposable ĊĠĠĠ Ġprivate Ġfun Ġload (){ ĊĠĠĠĠĠĠĠ ĠLog Util . d ( this . java Class ," å¼Ģå§ĭ æŁ¥è¯¢ Ġoffset =${ offset }") ĊĠĠĠĠĠĠĠ Ġquery Disposable Ġ= ĠNew Splash . db Photo !!. get Favorite (). query Photo ( offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ l -> handle Suc ceed ( l )}, { t -> handle Failed ( t )}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Suc ceed ( list : List < Photo > ){ ĊĠĠĠĠĠĠĠ ĠLog Util . d ( this . java Class ," æŁ¥è¯¢ åĪ° ${ list . size } æĿ¡ æķ°æį® ") ĊĠĠĠĠĠĠĠ Ġif Ġ( list == null Ġ|| Ġlist . size Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . state . value Ġ= ĠLoading State . LOADING _ NO _ DATA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfooter Adapter . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata . state . value Ġ= ĠLoading State . LOADING _ SUCCESS ĊĠĠĠĠĠĠĠ Ġvar Ġitems Ġ= Ġarray ListOf < Favorite Item >() ĊĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Favorite Item ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter . clear () ĊĠĠĠĠĠĠĠ Ġitem Adapter . add ( items ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Failed ( t : Throwable ){ ĊĠĠĠĠĠĠĠ ĠLog Util . d ( this . java Class ," ${ t . message }") ĊĠĠĠĠĠĠĠ Ġdata . state . value Ġ= ĠLoading State . LOADING _ FAILED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġif Ġ( query Disposable != null && ! query Disposable . is Disposed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Disposable . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfig Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= ĠColor . parse Color ("# 5 5 9 1 9 1 9 1 ") ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġaction Bar Ġ= Ġsupport ActionBar ĊĠĠĠĠĠĠĠ Ġaction Bar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġaction Bar ?. set Display Show Title Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġaction Bar ?. title Ġ= ĠUtils . getString ( R . string . title _ favorite ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen ( item ?. getItem Id ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home -> finish () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ delete _ all -> delete All (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete All () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbuild Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġbuild . setTitle ( R . string . delete _ all ) ĊĠĠĠĠĠĠĠ Ġbuild . setMessage ( R . string . delete _ all _ msg ) ĊĠĠĠĠĠĠĠ Ġbuild . set Cancel able ( false ) ĊĠĠĠĠĠĠĠ Ġbuild . set Positive Button ( R . string . bt _ ok ,{ d , w -> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNew Splash . db Photo !!. get Favorite (). delete All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfast Adapter . notify Adapter DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbuild . set Negative Button ( R . string . bt _ cancel , null ) ĊĠĠĠĠĠĠĠ Ġbuild . create (). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . favorite , menu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ } Ċ