/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 ĠSimon ĠV ig ĠTh erk ild sen Ċ Ġ* Ċ Ġ* Ġ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 Ġnet . sim on vt . c ath ode . ui . show Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġnet . sim on vt . c ath ode . R Ċ import Ġnet . sim on vt . c ath ode . api . enumeration . ItemType Ċ import Ġnet . sim on vt . c ath ode . common . ui . fragment . Toolbar Swipe Refresh Recycler Fragment Ċ import Ġnet . sim on vt . c ath ode . common . ui . instantiate Ċ import Ġnet . sim on vt . c ath ode . common . util . Ids Ċ import Ġnet . sim on vt . c ath ode . common . util . gu ava . Preconditions Ċ import Ġnet . sim on vt . c ath ode . entity . Episode Ċ import Ġnet . sim on vt . c ath ode . settings . Tr akt Link Settings Ċ import Ġnet . sim on vt . c ath ode . sync . scheduler . Episode Task Scheduler Ċ import Ġnet . sim on vt . c ath ode . sync . scheduler . Season Task Scheduler Ċ import Ġnet . sim on vt . c ath ode . ui . C ath ode ViewModel Factory Ċ import Ġnet . sim on vt . c ath ode . ui . Library Type Ċ import Ġnet . sim on vt . c ath ode . ui . Navigation Listener Ċ import Ġnet . sim on vt . c ath ode . ui . Shows Navigation Listener Ċ import Ġnet . sim on vt . c ath ode . ui . history . AddTo History Dialog Ċ import Ġnet . sim on vt . c ath ode . ui . history . Remove From History Dialog Ċ import Ġnet . sim on vt . c ath ode . ui . lists . Lists Dialog Ċ import Ġnet . sim on vt . c ath ode . ui . show . Season Adapter . ViewHolder Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSe ason Fragment Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval ĠviewModel Factory : ĠC ath ode ViewModel Factory , ĊĠ Ġprivate Ġval Ġseason Scheduler : ĠSe ason Task Scheduler , ĊĠ Ġprivate Ġval Ġepisode Scheduler : ĠEp isode Task Scheduler Ċ ) Ġ: ĠToolbar Swipe Refresh Recycler Fragment < ViewHolder >(), ĠSe ason Adapter . Episode Callbacks Ġ{ ĊĊĠ Ġvar Ġseason Id : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġset ĊĊĠ Ġprivate Ġlateinit Ġvar Ġtype : ĠLibrary Type ĊĊĠ Ġprivate Ġvar Ġtitle : ĠString ? Ġ= Ġnull ĊĊĠ Ġprivate Ġvar Ġseason Number Ġ= Ġ- 1 ĊĊĠ Ġprivate Ġval ĠviewModel : ĠSe ason ViewModel Ġby Ġview Models Ġ{ ĠviewModel Factory Ġ} ĊĊĠ Ġprivate Ġvar Ġseason Adapter : ĠSe ason Adapter ? Ġ= Ġnull ĊĊĠ Ġprivate Ġlateinit Ġvar Ġnavigation Listener : ĠShows Navigation Listener ĊĊĠ Ġprivate Ġvar Ġcolumn Count : ĠInt Ġ= Ġ 0 ĊĊĠ Ġprivate Ġvar Ġcount Ġ= Ġ- 1 ĊĠ Ġprivate Ġvar Ġw atched Count Ġ= Ġ- 1 ĊĠ Ġprivate Ġvar Ġcollected Count Ġ= Ġ- 1 ĊĊĠ Ġprivate Ġval Ġnavigation ClickListener Ġ= ĠView . OnClickListener Ġ{ Ġnavigation Listener . on Home Clicked () Ġ} ĊĊĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠ Ġnavigation Listener Ġ= Ġrequire Activity () Ġas ĠNavigation Listener ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ( in State : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( in State ) ĊĠĠĠ Ġval Ġargs Ġ= Ġrequire Arguments () ĊĠĠĠ Ġseason Id Ġ= Ġargs . getLong ( ARG _ SE ASON _ ID ) ĊĠĠĠ Ġtitle Ġ= Ġargs . getString ( ARG _ SHOW _ TITLE ) ĊĠĠĠ Ġseason Number Ġ= Ġargs . getInt ( ARG _ SE ASON _ NUMBER ) ĊĠĠĠ Ġtype Ġ= Ġargs . get Serializable ( ARG _ TYPE ) Ġas ĠLibrary Type ĊĊĠĠĠ ĠsetTitle ( title ) ĊĠĠĠ Ġupdate Subtitle () ĊĊĠĠĠ Ġcolumn Count Ġ= Ġresources . getInteger ( R . integer . episodes Columns ) ĊĊĠĠĠ ĠviewModel . set Season Id ( season Id ) ĊĠĠĠ ĠviewModel . loading . observe ( this , ĠObserver Ġ{ Ġloading Ġ-> Ġset Refresh ing ( loading ) Ġ}) ĊĠĠĠ ĠviewModel . season . observe ( this , ĠObserver Ġ{ Ġseason Ġ-> ĊĠĠĠĠĠ Ġtitle Ġ= Ġseason . show Title ĊĠĠĠĠĠ ĠsetTitle ( title ) ĊĠĠĠĠĠ Ġseason Number Ġ= Ġseason . season ĊĠĠĠĠĠ Ġupdate Subtitle () ĊĠĠĠ Ġ}) ĊĠĠĠ ĠviewModel . episodes . observe ( this , ĠObserver Ġ{ Ġepisode s Ġ-> Ġset Episode s ( episodes ) Ġ}) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠ ĠviewModel . refresh () ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate Subtitle () Ġ{ ĊĠĠĠ Ġif Ġ( season Number Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġsubtitle : ĠString ĊĠĠĠ Ġif Ġ( season Number Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġsubtitle Ġ= Ġresources . getString ( R . string . season _ special ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġsubtitle Ġ= Ġresources . getString ( R . string . season _ x , Ġseason Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġset Subtitle ( subtitle ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Menu ( toolbar : ĠToolbar ) Ġ{ ĊĠĠĠ Ġsuper . create Menu ( toolbar ) ĊĠĠĠ Ġval Ġmenu Ġ= Ġtoolbar . menu ĊĊĠĠĠ Ġif Ġ( count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġmenu . add ( 0 , ĠR . id . action _ history _ add , Ġ 0 , ĠR . string . action _ history _ add ) ĊĠĠĠĠĠ Ġif Ġ( w atched Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . add ( 0 , ĠR . id . action _ history _ remove , Ġ 0 , ĠR . string . action _ history _ remove ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( collected Count Ġ< Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . add ( 0 , ĠR . id . action _ collection _ add , Ġ 0 , ĠR . string . action _ collection _ add ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( collected Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . add ( 0 , ĠR . id . action _ collection _ remove , Ġ 0 , ĠR . string . action _ collection _ remove ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġmenu . add ( 0 , ĠR . id . action _ list _ add , Ġ 0 , ĠR . string . action _ list _ add ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon MenuItem Click ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠ ĠR . id . action _ list _ add Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġparent FragmentManager . instantiate ( ĊĠĠĠĠĠĠĠĠĠ ĠLists Dialog :: class . java , ĊĠĠĠĠĠĠĠĠĠ ĠLists Dialog . get Args ( ItemType . SE ASON , Ġseason Id ) ĊĠĠĠĠĠĠĠ Ġ). show ( parent FragmentManager , ĠDIALOG _ LIST S _ ADD ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠR . id . action _ history _ add Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġparent FragmentManager . instantiate ( ĊĠĠĠĠĠĠĠĠĠ ĠAdd To History Dialog :: class . java , ĊĠĠĠĠĠĠĠĠĠ ĠAdd To History Dialog . get Args ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd To History Dialog . Type . SE ASON , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseason Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . season _ x , Ġseason Number ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). show ( parent FragmentManager , ĠAdd To History Dialog . TAG ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠR . id . action _ history _ remove Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Tr akt Link Settings . is Linked ( require Context ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġparent FragmentManager . instantiate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRemove From History Dialog :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRemove From History Dialog . get Args ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemove From History Dialog . Type . SE ASON , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseason Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). getString ( R . string . season _ x , Ġseason Number ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ). show ( parent FragmentManager , ĠRemove From History Dialog . TAG ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġseason Scheduler . remove From History ( season Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠR . id . action _ collection _ add Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġseason Scheduler . set In Collection ( season Id , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠR . id . action _ collection _ remove Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġseason Scheduler . set In Collection ( season Id , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġsuper . on MenuItem Click ( item ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Column Count (): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġcolumn Count ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdisplays Menu Icon (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , Ġin State : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . on View Created ( view , Ġin State ) ĊĠĠĠ Ġtoolbar !!. set Navigation OnClickListener ( navigation ClickListener ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Episode Click ( episode Id : ĠLong ) Ġ{ ĊĠĠĠ Ġnavigation Listener . on Display Episode ( episode Id , Ġtitle ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Episode Collected ( episode Id : ĠLong , Ġcollected : ĠBoolean ) Ġ{ ĊĠĠĠ Ġepisode Scheduler . set IsIn Collection ( episode Id , Ġcollected ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Episode s ( episodes : ĠList < Episode >) Ġ{ ĊĠĠĠ Ġval Ġcount Ġ= Ġepisode s . size ĊĠĠĠ Ġvar Ġw atched Count Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġcollected Count Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( episode Ġin Ġepisode s ) Ġ{ ĊĠĠĠĠĠ Ġval Ġw atched Ġ= Ġepisode . w atched ĊĠĠĠĠĠ Ġval Ġcollected Ġ= Ġepisode . in Collection ĊĊĠĠĠĠĠ Ġif Ġ( w atched ) Ġ{ ĊĠĠĠĠĠĠĠ Ġw atched Count ++ ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( collected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcollected Count ++ ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( count Ġ!= Ġthis . count Ġ|| Ġw atched Count Ġ!= Ġthis . w atched Count Ġ|| Ġcollected Count Ġ!= Ġthis . collected Count ) Ġ{ ĊĠĠĠĠĠ Ġthis . count Ġ= Ġcount ĊĠĠĠĠĠ Ġthis . w atched Count Ġ= Ġw atched Count ĊĠĠĠĠĠ Ġthis . collected Count Ġ= Ġcollected Count ĊĊĠĠĠĠĠ Ġinvalidate Menu () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( season Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġseason Adapter Ġ= ĠSe ason Adapter ( require Activity (), Ġthis , Ġtype ) ĊĠĠĠĠĠ Ġadapter Ġ= Ġseason Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġseason Adapter !!. set List ( episodes ) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" net . sim on vt . c ath ode . ui . show . Season Fragment " ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠARG _ SE ASON _ ID Ġ= Ġ" net . sim on vt . c ath ode . ui . show . Season Fragment . season Id " ĊĠĠĠ Ġprivate Ġconst Ġval ĠARG _ SHOW _ TITLE Ġ= Ġ" net . sim on vt . c ath ode . ui . show . Season Fragment . show Title " ĊĠĠĠ Ġprivate Ġconst Ġval ĠARG _ SE ASON _ NUMBER Ġ= Ġ" net . sim on vt . c ath ode . ui . show . Season Fragment . season Number " ĊĠĠĠ Ġprivate Ġconst Ġval ĠARG _ TYPE Ġ= Ġ" net . sim on vt . c ath ode . ui . show . Season Fragment . type " ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠDIALOG _ LIST S _ ADD Ġ= Ġ" net . sim on vt . c ath ode . ui . show . Season Fragment . lists Add Dialog " ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Tag ( episode Id : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠ Ġreturn ĠTAG Ġ+ Ġ"/" Ġ+ Ġepisode Id Ġ+ Ġ"/" Ġ+ ĠI ds . new Id () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Args ( ĊĠĠĠĠĠ Ġseason Id : ĠLong , ĊĠĠĠĠĠ Ġshow Title : ĠString ?, ĊĠĠĠĠĠ Ġseason Number : ĠInt , ĊĠĠĠĠĠ Ġtype : ĠLibrary Type ĊĠĠĠ Ġ): ĠBundle Ġ{ ĊĠĠĠĠĠ ĠPreconditions . check Argument ( season Id Ġ>= Ġ 0 , Ġ" season Id Ġmust Ġbe Ġ>= Ġ 0 ") ĊĊĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠ Ġargs . put Long ( ARG _ SE ASON _ ID , Ġseason Id ) ĊĠĠĠĠĠ Ġargs . putString ( ARG _ SHOW _ TITLE , Ġshow Title ) ĊĠĠĠĠĠ Ġargs . put Int ( ARG _ SE ASON _ NUMBER , Ġseason Number ) ĊĠĠĠĠĠ Ġargs . put Serializable ( ARG _ TYPE , Ġtype ) ĊĠĠĠĠĠ Ġreturn Ġargs ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ