package Ġcom . example . glide test ĊĊ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Activity Options Ċ import Ġandroid . app . Progress Dialog Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Pair Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . example . glide test . adapter . End less RecyclerView Scroll Listener Ċ import Ġcom . example . glide test . adapter . Movies Adapter Ċ import Ġcom . example . glide test . api . Client Ċ import Ġcom . example . glide test . api . Service Ċ import Ġcom . example . ret rofit test . Models . Api Movies Ċ import Ġcom . example . ret rofit test . Models . Movie Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . content _ main .* ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġvar Ġre cycle View : Ġandroidx . recyclerview . widget . RecyclerView ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġadapter : ĠMov ies Adapter ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġmovies : ĠMutable List < Movie >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġapi Movies : ĠApi Movies ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġpd : ĠProgress Dialog ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġswipe Container : ĠSw ipe Refresh Layout ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġscroll Listener : ĠEnd less RecyclerView Scroll Listener ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġpage : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġvar ĠisLoading : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĊĠĠĠĠĠĠĠ Ġinit Views () ĊĠĠĠĠĠĠĠ Ġswipe Container Ġ= Ġmain _ content ĊĠĠĠĠĠĠĠ Ġswipe Container ?. setColor Scheme Resources ( R . color . red ) ĊĠĠĠĠĠĠĠ Ġswipe Container ?. setOn Refresh Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Views () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠÃ¡ dfs adf ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtransparent StatusBar () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtransparent StatusBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . decor View . system Ui Visibility Ġ= ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ HIDE _ NAV IG ATION Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE _ STICK Y ĊĠĠĠĠĠĠĠ Ġset Window Flag ( this , ĠWindow Manager . LayoutParams . FLAG _ TRANSL UC ENT _ STATUS , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġwindow . navigation Bar Color Ġ= ĠColor . TRANSP ARENT ĊĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= ĠColor . TRANSP ARENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Window Flag ( activity : ĠActivity , Ġbits : ĠInt , Ġon : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwin Ġ= Ġactivity . window ĊĠĠĠĠĠĠĠ Ġval Ġwin Params Ġ= Ġwin . attributes ĊĠĠĠĠĠĠĠ Ġif Ġ( on ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwin Params . flags Ġ= Ġwin Params . flags Ġor Ġbits ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwin Params . flags Ġ= Ġwin Params . flags Ġand Ġbits . inv () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwin . attributes Ġ= Ġwin Params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġpage Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġmovies Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġapi Movies Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġpd Ġ= ĠProgress Dialog ( this ) ĊĠĠĠĠĠĠĠ Ġpd ?. setMessage (" Load Ġmovie ...") ĊĠĠĠĠĠĠĠ Ġpd ?. set Cancel able ( false ) ĊĠĠĠĠĠĠĠ Ġpd ?. show () ĊĠĠĠĠĠĠĠ Ġre cycle View Ġ= Ġre cycle _ view ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠMov ies Adapter ( this ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . register Item Movie ClickListener ( object Ġ: ĠMov ies Adapter . Item Movie ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Action ( movie ID : ĠInt ?, Ġthumbnail : ĠImageView , Ġtitle : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠActivity Options . make Scene Transition Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair . create < View , ĠString >( thumbnail , Ġ" thumbnail ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ MainActivity , ĠDetail Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" movie ID ", movie ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent , Ġoptions . to Bundle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . resources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle View ?. layout Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroidx . recyclerview . widget . Grid LayoutManager ( this , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle View ?. layout Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroidx . recyclerview . widget . Grid LayoutManager ( this , Ġ 4 ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cycle View ?. item Animator Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroidx . recyclerview . widget . Default Item Animator () Ċ // ĠĠĠĠĠĠĠ Ġre cycle View ?. layout Manager Ġ= ĠLinearLayoutManager ( this @ MainActivity , LinearLayout . HORIZONTAL , false ) Ċ // ĠĠĠĠĠĠĠ Ġre cycle View ?. on Fl ing Listener ( object Ġ: ĠRecyclerView . On Fl ing Listener (){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fl ing ( p 0 : ĠInt , Ġp 1 : ĠInt ): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( p 1 ) Ġ> Ġ 0 . 7 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ġ Ġ= Ġ 1 Ġ* ĠMath . sign um ( 1 Ġas ĠDouble ). toInt () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle View !!. fl ing ( p 0 , Ġy ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ}) Ċ Ċ // ĠĠĠĠĠĠĠ Ġre cycle View ?. fl ing ( 2 , 2 ) ĊĊ Ċ // ĠĠĠĠĠĠĠ ĠRecyclerView . Smooth Scroller Ġsmooth Scroller Ġ= Ġnew ĠFlex i Smooth Scroller ( getContext ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Milliseconds Per In ch Searching Target ( 1 0 0 f )); Ċ // ĠĠĠĠĠĠĠ Ġsmooth Scroller . setTarget Position ( target Pos ); Ċ // ĠĠĠĠĠĠĠ Ġre cyclerView . get LayoutManager (). start Smooth Scroll ( smooth Scroller ); ĊĊĊĠĠĠĠĠĠĠ Ġre cycle View ?. adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager : Ġandroidx . recyclerview . widget . RecyclerView . LayoutManager ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle _ view . layout Manager ĊĊĠĠĠĠĠĠĠ Ġscroll Listener Ġ= Ġobject Ġ: ĠEnd less RecyclerView Scroll Listener ( layout Manager !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad More ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Items Count : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : Ġandroidx . recyclerview . widget . RecyclerView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( isLoading )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Movies ?. page Ġ== Ġapi Movies ?. total _ pages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity . page ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb Loading . visibility Ġ= ĠProgress Bar . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload JSON () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Listener ?. reset State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cycle _ view . add On Scroll Listener ( scroll Listener Ġas ĠEnd less RecyclerView Scroll Listener ) ĊĊĠĠĠĠĠĠĠ Ġload JSON () ĊĠĠĠĠĠĠĠ Ġadapter ?. notify DataSet Changed () ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġprivate Ġfun Ġload JSON () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient : ĠClient ? Ġ= ĠClient () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice : ĠService ? Ġ= Ġclient ?. client ()?. create ( Service :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice !!. get Api Movies Observable ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Movies Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmov iem ore : ĠList < Movie > Ġ= Ġapi Movies ?. results Ġ?: Ġempty List () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. addAll ( mov iem ore ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( swipe Container ?. is Refresh ing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Container ?. is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpd ?. dismiss () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb Loading ?. visibility Ġ= ĠProgress Bar . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall : ĠCall < Api Movies >? Ġ= Ġservice ?. get Api Movies ( page ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcall ?. run Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( object Ġ: ĠCallback < Api Movies > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Api Movies >, Ġt : ĠThrowable ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Error Ġ", Ġt . message ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Error ĠFetch ing ĠData !", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Api Movies >, Ġresponse : ĠResponse < Api Movies >) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Movies Ġ= Ġresponse . body () Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmov iem ore : ĠList < Movie > Ġ= Ġapi Movies ?. results Ġ?: Ġempty List () Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. addAll ( mov iem ore ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( swipe Container !!. is Refresh ing ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Container !!. is Refresh ing Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpd ?. dismiss () Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isLoading ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb Loading . visibility Ġ= ĠProgress Bar . GONE Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Error Ġ", Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġe . toString (), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ } ĊĊĊĊĊĊĊ