package Ġcom . dam ian ch od ore k . ren shi . controller . base Ċ Ċ import Ġandroid . support . annotation . Call Super Ċ import Ġcom . dam ian ch od ore k . ren shi . controller . Controller Ċ import Ġcom . dam ian ch od ore k . ren shi . store . Store Ċ import Ġcom . dam ian ch od ore k . ren shi . store . state . State Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ /** Ċ Ġ* ĠBase Ġimplementation Ġof Ġ[ Controller ] Ġto Ġreduce Ġboilerplate . ĠYour Ġcontrollers Ġshould Ġextend Ċ Ġ* Ġthis Ġclass . Ċ Ġ* Ġ@ param ĠP LU GIN Ġthe Ġtype Ġof Ġa Ġplugin Ġthat Ġcontroller Ġwill Ġaccess . Ċ Ġ* Ġ@ param ĠSTATE Ġthe Ġsubtype Ġof Ġ[ com . dam ian ch od ore k . ren shi . store . state . State ] Ġthat Ġwill Ġbe Ċ Ġ* Ġused Ġby Ġconst rollers Ġstore Ġreference . Ċ Ġ* Ġ@ author ĠD am ian ĠCh od ore k Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ", Ġ" Red undant Unit ReturnType ") Ċ abstract Ġclass ĠBaseController < PLUGIN , ĠSTATE Ġ: ĠState > Ġ: ĠController Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdetach Disposable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġval Ġdestroy Disposable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġstore : ĠStore < STATE > ĊĊĠĠĠ Ġprivate Ġvar Ġplugin Weak Ref : ĠWeak Reference < PLUGIN >? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġplugin : ĠP LU GIN ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġplugin Weak Ref ?. get () ĊĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġoverride Ġfun Ġon Detach Plugin (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġdetach Disposable . clear () ĊĠĠĠĠĠĠĠ Ġplugin Weak Ref Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġdestroy Disposable . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose On Detach ( dis posable ToAdd : ĠDis posable ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġdetach Disposable . add ( dis posable ToAdd ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose On Destroy ( dis posable ToAdd : ĠDis posable ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġdestroy Disposable . add ( dis posable ToAdd ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Store Ref ( store : ĠStore < *> ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . store Ġ= Ġstore Ġas ĠStore < STATE > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Plugin Ref ( plugin : ĠAny ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . plugin Weak Ref Ġ= ĠWeak Reference ( plugin Ġas ĠP LU GIN ) ĊĠĠĠ Ġ} Ċ }