/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 . ĠZ ac ĠS we ers Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġio . s we ers . catch up . ui . activity Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Factory Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . fragment . app . commit Now Ċ import Ġandroidx . recyclerview . widget . RecyclerView . Re cyc led View Pool Ċ import Ġcom . uber . aut od is pose . auto Dispose Ċ import Ġdagger . Bind s Ċ import Ġdagger . Provides Ċ import Ġdagger . mult ib ind ings . Mult ib inds Ċ import Ġio . s we ers . catch up . R Ċ import Ġio . s we ers . catch up . data . Link Manager Ċ import Ġio . s we ers . catch up . data . Service Dao Ċ import Ġio . s we ers . catch up . edu . Sy ll ab us Ċ import Ġio . s we ers . catch up . injection . Activity Module Ċ import Ġio . s we ers . catch up . injection . scopes . Per Activity Ċ import Ġio . s we ers . catch up . service . api . Link Handler Ċ import Ġio . s we ers . catch up . service . api . Scroll able Content Ċ import Ġio . s we ers . catch up . service . api . Service Ċ import Ġio . s we ers . catch up . service . api . Service Meta Ċ import Ġio . s we ers . catch up . servic ere gistry . Resolved Catch Up Service Registry Ċ import Ġio . s we ers . catch up . ui . Detail Dis player Ċ import Ġio . s we ers . catch up . base . ui . Inject ing Base Activity Ċ import Ġio . s we ers . catch up . ui . fragments . Pager Fragment Ċ import Ġio . s we ers . catch up . ui . fragments . service . Storage Back ed Service Ċ import Ġio . s we ers . catch up . util . custom tabs . Custom Tab Activity Helper Ċ import Ġk ot ter knife . bind View Ċ import Ġme . s aket . inbox recyclerview . Inbox RecyclerView Ċ import Ġme . s aket . inbox recyclerview . dim ming . Tint Painter Ċ import Ġme . s aket . inbox recyclerview . page . Expand able Page Layout Ċ import Ġme . s aket . inbox recyclerview . page . Intercept Result Ċ import Ġme . s aket . inbox recyclerview . page . Simple Page StateChange Callbacks Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Provider Ċ import Ġjavax . inject . Qualifier Ċ Ċ class ĠMainActivity Ġ: ĠInject ing Base Activity () Ġ{ ĊĊĠ Ġ@ Inject ĊĠ Ġinternal Ġlateinit Ġvar Ġcustom Tab : ĠCustom Tab Activity Helper ĊĠ Ġ@ Inject ĊĠ Ġinternal Ġlateinit Ġvar Ġlink Manager : ĠLink Manager ĊĠ Ġ@ Inject ĊĠ Ġinternal Ġlateinit Ġvar Ġsy ll ab us : ĠS yll ab us ĊĠ Ġ@ Inject ĊĠ Ġinternal Ġlateinit Ġvar Ġfragment Factory : ĠFragment Factory ĊĊĠ Ġinternal Ġval Ġdetail Page Ġby Ġbind View < Expand able Page Layout >( R . id . detail Page ) ĊĠ Ġinternal Ġvar Ġpager Fragment : ĠP ager Fragment ? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun Ġset Fragment Factory () Ġ{ ĊĠĠĠ Ġsupport FragmentManager . fragment Factory Ġ= Ġfragment Factory ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġsy ll ab us . bind ( this ) ĊĠĠĠ Ġlifecycle () ĊĠĠĠĠĠĠĠ Ġ. do On Start ( link Manager ) Ġ{ Ġconnect ( this @ MainActivity ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. do On Start ( custom Tab ) Ġ{ Ġbind Custom Tabs Service ( this @ MainActivity ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. do On Stop ( custom Tab ) Ġ{ Ġun bind Custom Tabs Service ( this @ MainActivity ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. do On Destroy ( custom Tab ) Ġ{ Ġconnection Callback Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġ. auto Dispose ( this ) ĊĠĠĠĠĠĠĠ Ġ. subscribe () ĊĊĠĠĠ Ġval Ġview Group Ġ= Ġview Container . for Activity ( this ) ĊĠĠĠ Ġlayout Inflater . inflate ( R . layout . activity _ main , Ġview Group ) ĊĊĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġsupport FragmentManager . commit Now Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( R . id . fragment _ container , ĠP ager Fragment (). also Ġ{ Ġpager Fragment Ġ= Ġit Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġpager Fragment Ġ= Ġsupport FragmentManager . find Fragment ById ( R . id . fragment _ container ) Ġas ĠP ager Fragment ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ d agger . Module ( includes Ġ= Ġ[ Resolved Catch Up Service Registry :: class ]) ĊĠ Ġabstract Ġclass ĠService Integration Module Ġ: ĠActivity Module < MainActivity > Ġ{ ĊĠĠĠ Ġ@ d agger . Module ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġ@ TextView Pool ĊĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠ Ġ@ Per Activity ĊĠĠĠĠĠ Ġfun Ġprovide TextView Pool () Ġ= ĠRe cyc led View Pool () ĊĊĠĠĠĠĠ Ġ@ Visual View Pool ĊĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠ Ġ@ Per Activity ĊĠĠĠĠĠ Ġfun Ġprovide Visual View Pool () Ġ= ĠRe cyc led View Pool () ĊĊĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠ Ġ@ Per Activity ĊĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠ Ġ@ Final Services ĊĠĠĠĠĠ Ġfun Ġprovide Final Services ( ĊĠĠĠĠĠĠĠ Ġservice Dao : ĠService Dao , ĊĠĠĠĠĠĠĠ Ġservice Met as : ĠMap < String , Ġ@ Jvm Suppress W ild cards ĠService Meta >, ĊĠĠĠĠĠĠĠ Ġshared Preferences : ĠSharedPreferences , ĊĠĠĠĠĠĠĠ Ġservices : ĠMap < String , Ġ@ Jvm Suppress W ild cards ĠProvider < Service >> ĊĠĠĠĠĠ Ġ): ĠMap < String , ĠProvider < Service >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġservices ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Met as . getValue ( it . key ). enabled Ġ&& Ġshared Preferences . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Met as . getValue ( it . key ). enabled Preference Key , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Values Ġ{ Ġ(_, Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider Ġ{ ĠStorage Back ed Service ( service Dao , Ġvalue . get ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Mult ib inds ĊĠĠĠ Ġabstract Ġfun Ġservices (): ĠMap < String , ĠService > ĊĊĠĠĠ Ġ@ Mult ib inds ĊĠĠĠ Ġabstract Ġfun Ġservice Met as (): ĠMap < String , ĠService Meta > ĊĊĠĠĠ Ġ@ Mult ib inds ĊĠĠĠ Ġabstract Ġfun Ġfragment Creators (): ĠMap < Class < out ĠFragment >, Ġ@ Jvm Suppress W ild cards ĠFragment > ĊĊĠĠĠ Ġ@ Bind s ĊĠĠĠ Ġ@ Per Activity ĊĠĠĠ Ġabstract Ġfun Ġprovide Link Handler ( link Manager : ĠLink Manager ): ĠLink Handler ĊĊĠĠĠ Ġ@ Bind s ĊĠĠĠ Ġ@ Per Activity ĊĠĠĠ Ġabstract Ġfun Ġprovide Detail Dis player ( main Activity Detail Dis player : ĠMainActivity Detail Dis player ): ĠDetail Dis player ĊĊĠĠĠ Ġ@ Bind s ĊĠĠĠ Ġ@ Per Activity ĊĠĠĠ Ġabstract Ġfun Ġprovide Fragment Factory ( fragment Factory : ĠMainActivity Fragment Factory ): ĠFragment Factory ĊĠ Ġ} Ċ } Ċ Ċ @ Qualifier Ċ annotation Ġclass ĠTextView Pool Ċ Ċ @ Qualifier Ċ annotation Ġclass ĠVisual View Pool Ċ Ċ @ Qualifier Ċ annotation Ġclass ĠFinal Services Ċ Ċ /** Ċ Ġ* ĠA Ġdisplay er Ġthat Ġrepeatedly Ġshows Ġnew Ġdetail Ġviews Ġin Ġa Ġnew ĠExpand able Page Layout . Ċ Ġ*/ Ċ @ Per Activity Ċ class ĠMainActivity Detail Dis player Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġmain Activity : ĠMainActivity Ċ ) Ġ: ĠDetail Dis player Ġ{ ĊĊĠ Ġprivate Ġvar Ġcol lap ser : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠ Ġprivate Ġinline Ġval Ġdetail Page Ġget () Ġ= Ġmain Activity . detail Page ĊĊĠ Ġoverride Ġval Ġis Expanded Or Expand ing Ġget () Ġ= Ġdetail Page . is Expanded Or Expand ing ĊĊĠ Ġoverride Ġfun Ġshow Detail ( body : Ġ( Expand able Page Layout , ĠFragment Manager ) Ġ-> Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġcol lap ser ?. invoke () ĊĠĠĠ Ġcol lap ser Ġ= Ġnull ĊĠĠĠ Ġdetail Page . add StateChange Callbacks ( object Ġ: ĠSimple Page StateChange Callbacks () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Page Collapsed () Ġ{ ĊĠĠĠĠĠĠĠ Ġdetail Page . remove StateChange Callbacks ( this ) ĊĠĠĠĠĠĠĠ Ġcol lap ser Ġ= Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġcol lap ser Ġ= Ġbody ( detail Page , Ġmain Activity . support FragmentManager ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġbind ( irv : ĠIn box RecyclerView , Ġuse Existing Fragment : ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġtarget Fragment Ġ= Ġif Ġ( use Existing Fragment ) Ġ{ ĊĠĠĠĠĠ Ġmain Activity . support FragmentManager . find Fragment ById ( detail Page . id ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind ( irv , Ġtarget Fragment ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġbind ( irv : ĠIn box RecyclerView , Ġtarget Fragment : ĠFragment ?) Ġ{ ĊĠĠĠ Ġ// ĠTODO Ġthis Ġis Ġugly , Ġdo Ġbetter ĊĠĠĠ Ġmain Activity . pager Fragment ?. app Bar Layout ?. let Ġ{ ĊĠĠĠĠĠ Ġdetail Page . push Parent Toolbar On Expand ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġir v . expand able Page Ġ= Ġdetail Page ĊĠĠĠ Ġir v . tint Painter Ġ= ĠT int Painter . un covered Area ( ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠContext Compat . getColor ( irv . context , ĠR . color . color Primary ), ĊĠĠĠĠĠĠĠ Ġopacity Ġ= Ġ 0 . 6 5 F ĊĠĠĠ Ġ) ĊĠĠĠ Ġif Ġ( target Fragment Ġis ĠScroll able Content ) Ġ{ ĊĠĠĠĠĠ Ġdetail Page . pull To Collapse Interceptor Ġ= Ġ{ Ġ_, Ġ_, Ġup ward Pull Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġdirection Int Ġ= Ġif Ġ( up ward Pull ) Ġ+ 1 Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġcan Scroll Further Ġ= Ġtarget Fragment . can Scroll Vert ically ( direction Int ) ĊĠĠĠĠĠĠĠ Ġif Ġ( can Scroll Further ) ĠInter cept Result . INTER CEPT ED Ġelse ĠInter cept Result . IG NO RED ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġun bind ( irv : ĠIn box RecyclerView ) Ġ{ ĊĠĠĠ Ġdetail Page . pull To Collapse Interceptor Ġ= Ġnull ĊĠĠĠ Ġir v . expand able Page Ġ= Ġnull ĊĠ Ġ} Ċ } Ċ