package Ġeu . kan ade . t ach iy omi . ui . manga . track Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġeu . kan ade . t ach iy omi . data . database . Database Helper Ċ import Ġeu . kan ade . t ach iy omi . data . database . models . M anga Ċ import Ġeu . kan ade . t ach iy omi . data . track . model . Track Search Ċ import Ġeu . kan ade . t ach iy omi . databinding . Track Controller Binding Ċ import Ġeu . kan ade . t ach iy omi . ui . base . controller . N ucleus Controller Ċ import Ġeu . kan ade . t ach iy omi . util . system . copy To Clipboard Ċ import Ġeu . kan ade . t ach iy omi . util . system . toast Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġreactive circ us . flow binding . swiper ef resh layout . ref res hes Ċ import Ġtim ber . log . Tim ber Ċ import Ġu y . ko hes ive . in jekt . In jekt Ċ import Ġu y . ko hes ive . in jekt . api . get Ċ Ċ class ĠTrack Controller Ġ: ĊĠĠĠ ĠN ucleus Controller < Track Controller Binding , ĠTrack Presenter >, ĊĠĠĠ ĠTrack Adapter . OnClickListener , ĊĠĠĠ ĠSet Track Status Dialog . Listener , ĊĠĠĠ ĠSet Track Chapter s Dialog . Listener , ĊĠĠĠ ĠSet Track Score Dialog . Listener , ĊĠĠĠ ĠSet Track Reading Dates Dialog . Listener Ġ{ ĊĊĠĠĠ Ġconstructor ( manga : ĠM anga ?) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġbundle Of ( M ANG A _ EXTRA Ġto Ġ( manga ?. id Ġ?: Ġ 0 )) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . manga Ġ= Ġm anga ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( manga Id : ĠLong ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ ĠIn jekt . get < Database Helper >(). getM anga ( manga Id ). execute As Blocking () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġconstructor ( bundle : ĠBundle ) Ġ: Ġthis ( bundle . getLong ( M ANG A _ EXTRA )) ĊĊĠĠĠ Ġvar Ġm anga : ĠM anga ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġadapter : ĠTrack Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThere 's Ġno Ġmenu , Ġbut Ġthis Ġavoids Ġa Ġbug Ġwhen Ġcoming Ġfrom Ġthe Ġcatalog ue , Ġwhere Ġthe Ġmenu ĊĠĠĠĠĠĠĠ Ġ// Ġdis appe ars Ġif Ġthe Ġsearch view Ġis Ġexpanded ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Title (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm anga ?. title ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Presenter (): ĠTrack Presenter Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTrack Presenter ( manga !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinf late View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠTrack Controller Binding . inflate ( in flater ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( manga Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠTrack Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . track Recycler . layout Manager Ġ= ĠLinearLayoutManager ( view . context ) ĊĠĠĠĠĠĠĠ Ġbinding . track Recycler . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . ref res hes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġpresenter . refresh () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Next Track ings ( track ings : ĠList < Track Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġat Least One Link Ġ= Ġtrack ings . any Ġ{ Ġit . track Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġadapter ?. items Ġ= Ġtrack ings ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . isEnabled Ġ= Ġat Least One Link ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon SearchResults ( results : ĠList < Track Search >) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Search Dialog ()?. on SearchResults ( results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ") ĊĠĠĠ Ġfun Ġon SearchResults Error ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠ Ġactivity ?. toast ( error . message ) ĊĠĠĠĠĠĠĠ Ġget Search Dialog ()?. on SearchResults Error () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Search Dialog (): ĠTrack Search Dialog ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrouter . get Controller With Tag ( TAG _ SEARCH _ CONTROLLER ) Ġas ? ĠTrack Search Dialog ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Refresh Done () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Refresh Error ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġactivity ?. toast ( error . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Logo Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrack Ġ= Ġadapter ?. getItem ( position )?. track Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( track . tracking _ url . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. startActivity ( Intent ( Intent . ACTION _ VIEW , Ġtrack . tracking _ url . to Uri ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Set Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġadapter ?. getItem ( position ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠTrack Search Dialog ( this , Ġitem . service ). show Dialog ( router , ĠTAG _ SEARCH _ CONTROLLER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Title Long Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. getItem ( position )?. track ?. title ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. copy To Clipboard ( it , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Status Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġadapter ?. getItem ( position ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( item . track Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠSet Track Status Dialog ( this , Ġitem ). show Dialog ( router ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Chapter s Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġadapter ?. getItem ( position ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( item . track Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠSet Track Chapter s Dialog ( this , Ġitem ). show Dialog ( router ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Score Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġadapter ?. getItem ( position ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( item . track Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠSet Track Score Dialog ( this , Ġitem ). show Dialog ( router ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon StartDate Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġadapter ?. getItem ( position ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( item . track Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠSet Track Reading Dates Dialog ( this , ĠSet Track Reading Dates Dialog . Reading Date . Start , Ġitem ). show Dialog ( router ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Date Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġadapter ?. getItem ( position ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( item . track Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠSet Track Reading Dates Dialog ( this , ĠSet Track Reading Dates Dialog . Reading Date . Finish , Ġitem ). show Dialog ( router ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetStatus ( item : ĠTrack Item , Ġselection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . setStatus ( item , Ġselection ) ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Score ( item : ĠTrack Item , Ġscore : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . set Score ( item , Ġscore ) ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Chapter s Read ( item : ĠTrack Item , Ġchapter s Read : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . set Last Chapter Read ( item , Ġchapter s Read ) ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Reading Date ( item : ĠTrack Item , Ġtype : ĠSet Track Reading Dates Dialog . Reading Date , Ġdate : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSet Track Reading Dates Dialog . Reading Date . Start Ġ-> Ġpresenter . set StartDate ( item , Ġdate ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSet Track Reading Dates Dialog . Reading Date . Finish Ġ-> Ġpresenter . set Finish Date ( item , Ġdate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠM ANG A _ EXTRA Ġ= Ġ" manga " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG _ SEARCH _ CONTROLLER Ġ= Ġ" track _ search _ controller " ĊĠĠĠ Ġ} Ċ } Ċ