package Ġcom . one gravity . bloc . books Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . one gravity . bloc . R Ċ import Ġcom . one gravity . bloc . get OrCreate Ċ import Ġcom . one gravity . bloc . sample . books . Book State Ċ import Ġcom . one gravity . bloc . sample . books . Books Repository Impl Ċ import Ġcom . one gravity . bloc . sample . books . Books UseCase Ċ import Ġcom . one gravity . bloc . sample . books . Books UseCase Impl Ċ import Ġcom . one gravity . bloc . subscribe Ċ Ċ class ĠBooks Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġuse Case Ġby Ġget OrCreate Ġ{ ĠBooks UseCase Impl ( it , ĠBooks Repository Impl ()) Ġ} Ċ // ĠĠĠ Ġprivate Ġval Ġuse Case Ġby Ġget OrCreate Ġ{ ĠBooks UseCase Impl ( it , ĠBooks Repository Impl ()) Ġ} Ċ // ĠĠĠ Ġprivate Ġval Ġuse Case Ġby Ġget OrCreate Ġ{ ĠBooks UseCase Impl Simple ( it , ĠBooks Repository Impl ()) Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġpage Empty : ĠView ĊĠĠĠ Ġlateinit Ġvar Ġpage Loading : ĠView ĊĠĠĠ Ġlateinit Ġvar Ġpage Content : ĠView ĊĠĠĠ Ġlateinit Ġvar Ġpage Error : ĠView ĊĠĠĠ Ġlateinit Ġvar Ġbooks Message : ĠTextView ĊĠĠĠ Ġlateinit Ġvar ĠerrorMessage : ĠTextView ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ books ) ĊĠĠĠĠĠĠĠ Ġsetup View ( use Case ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġuse Case . subscribe ( this , Ġstate Ġ= Ġ:: observe State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve State ( state : ĠBook State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBook State . Loaded Ġ-> Ġshow Content ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBook State . Empty Ġ-> Ġpage Empty . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBook State . Failure Ġ-> Ġshow Error ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBook State . Loading Ġ-> Ġpage Loading . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error ( state : ĠBook State . Failure ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpage Error . show () ĊĠĠĠĠĠĠĠ ĠerrorMessage . text Ġ= Ġstate . message ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġprivate Ġfun Ġshow Content ( state : ĠBook State . Loaded ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpage Content . show () ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġstate . books . join ToString ( separator Ġ= Ġ"\ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . title } Ġ(${ it . year })" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbooks Message . text Ġ= Ġ" Books :\ n $ text " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup View ( use Case : ĠBooks UseCase ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpage Empty Ġ= ĠfindViewById ( R . id . page Empty ) ĊĠĠĠĠĠĠĠ Ġpage Loading Ġ= ĠfindViewById ( R . id . page Loading ) ĊĠĠĠĠĠĠĠ Ġpage Content Ġ= ĠfindViewById ( R . id . page Content ) ĊĠĠĠĠĠĠĠ Ġpage Error Ġ= ĠfindViewById ( R . id . page Error ) ĊĠĠĠĠĠĠĠ Ġbooks Message Ġ= ĠfindViewById ( R . id . books Message ) ĊĠĠĠĠĠĠĠ ĠerrorMessage Ġ= ĠfindViewById ( R . id . errorMessage ) ĊĠĠĠĠĠĠĠ Ġval Ġload Listener Ġ= ĠView . OnClickListener Ġ{ Ġuse Case . load () Ġ} ĊĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . try Again Button ). setOnClickListener ( load Listener ) ĊĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . reload Button ). setOnClickListener ( load Listener ) ĊĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . load Button ). setOnClickListener ( load Listener ) ĊĊĠĠĠĠĠĠĠ Ġval Ġclear Listener Ġ= ĠView . OnClickListener Ġ{ Ġuse Case . clear () Ġ} ĊĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . clear Button ). setOnClickListener ( clear Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠView . show () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ!= ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ!= Ġpage Content ) Ġpage Content . hide () ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ!= Ġpage Loading ) Ġpage Loading . hide () ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ!= Ġpage Error ) Ġpage Error . hide () ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ!= Ġpage Empty ) Ġpage Empty . hide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠView . hide () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ!= ĠView . IN VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }