package Ġorg . ny pl . simpl ified . viewer . audio book Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . common . util . concurrent . Listening ExecutorService Ċ import Ġorg . library simpl ified . audio book . manifest . api . Player Manifest Ċ import Ġorg . library simpl ified . services . api . Services Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Authentication Credentials Ċ import Ġorg . ny pl . simpl ified . books . audio . Audio Book Manifest Str ategies Type Ċ import Ġorg . ny pl . simpl ified . profiles . controller . api . Profiles Controller Type Ċ import Ġorg . ny pl . simpl ified . task recorder . api . Task Result Ċ import Ġorg . ny pl . simpl ified . ui . thread . api . UIT hread ServiceType Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠA Ġfragment Ġthat Ġdownloads Ġand Ġupdates Ġan Ġaudio Ġbook Ġmanifest . Ċ Ġ*/ Ċ Ċ class ĠAudio Book Loading Fragment Ġ: ĠFragment () Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġconst Ġval Ġparameters Key Ġ= ĊĠĠĠĠĠ Ġ" org . ny pl . simpl ified . viewer . audio book . Audio Book Loading Fragment . parameters " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnew Ġfragment . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġnew Instance ( parameters : ĠAudio Book Loading Fragment Parameters ): ĠAudio Book Loading Fragment Ġ{ ĊĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠ Ġargs . put Serializable ( parameters Key , Ġparameters ) ĊĠĠĠĠĠ Ġval Ġfragment Ġ= ĠAudio Book Loading Fragment () ĊĠĠĠĠĠ Ġfragment . arguments Ġ= Ġargs ĊĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġlateinit Ġvar Ġio Executor : ĠList ening ExecutorService ĊĠ Ġprivate Ġlateinit Ġvar Ġlistener : ĠAudio Book Loading Fragment Listener Type ĊĠ Ġprivate Ġlateinit Ġvar Ġplayer Parameters : ĠAudio Book Player Parameters ĊĠ Ġprivate Ġlateinit Ġvar Ġprofiles : ĠPro files Controller Type ĊĠ Ġprivate Ġlateinit Ġvar Ġprogress : ĠProgress Bar ĊĠ Ġprivate Ġlateinit Ġvar Ġstrategies : ĠAudio Book Manifest Str ategies Type ĊĠ Ġprivate Ġlateinit Ġvar Ġui Thread : ĠUIT hread ServiceType ĊĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Audio Book Loading Fragment :: class . java ) ĊĊĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠ Ġstate : ĠBundle ? ĊĠ Ġ): ĠView ? Ġ{ ĊĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . audio _ book _ player _ loading , Ġcontainer , Ġfalse ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , Ġstate : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . on View Created ( view , Ġstate ) ĊĊĠĠĠ Ġthis . progress Ġ= Ġview . findViewById ( R . id . audio _ book _ loading _ progress ) ĊĠĠĠ Ġthis . progress . isIn determinate Ġ= Ġtrue ĊĠĠĠ Ġthis . progress . max Ġ= Ġ 1 0 0 ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ( state : ĠBundle ?) Ġ{ ĊĠĠĠ Ġthis . log . debug (" onCreate ") ĊĊĠĠĠ Ġsuper . onCreate ( state ) ĊĊĠĠĠ Ġval Ġservices Ġ= ĠServices . service Directory () ĊĊĠĠĠ Ġthis . profiles Ġ= ĊĠĠĠĠĠ Ġservices . require Service ( Profiles Controller Type :: class . java ) ĊĠĠĠ Ġthis . ui Thread Ġ= ĊĠĠĠĠĠ Ġservices . require Service ( UIT hread ServiceType :: class . java ) ĊĠĠĠ Ġthis . str ategies Ġ= ĊĠĠĠĠĠ Ġservices . require Service ( Audio Book Manifest Str ategies Type :: class . java ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Activity Created ( state : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . on Activity Created ( state ) ĊĊĠĠĠ Ġthis . listener Ġ= Ġthis . activity Ġas ĠAudio Book Loading Fragment Listener Type ĊĊĠĠĠ Ġthis . player Parameters Ġ= ĊĠĠĠĠĠ Ġthis . listener . on Loading Fragment W ants Audio Book Parameters () ĊĠĠĠ Ġthis . io Executor Ġ= ĊĠĠĠĠĠ Ġthis . listener . on Loading Fragment W ants IO Executor () ĊĊĠĠĠ Ġval Ġcredentials Ġ= ĊĠĠĠĠĠ Ġthis . profiles . profile Account For Book ( this . player Parameters . book ID ) ĊĠĠĠĠĠĠĠ Ġ. login State ĊĠĠĠĠĠĠĠ Ġ. credentials ĊĊĠĠĠ Ġthis . io Executor . execute Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . ui Thread . run On UIT hread Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . progress . isIn determinate Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġthis . progress . progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmanifest Ġ= Ġthis . download And Save Manifest ( credentials ) ĊĊĠĠĠĠĠĠĠ Ġthis . ui Thread . run On UIT hread Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . progress . isIn determinate Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġthis . progress . progress Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . listener . on Loading Fragment Loading Finished ( manifest ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . ui Thread . run On UIT hread Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . progress . isIn determinate Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġthis . progress . progress Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . listener . on Loading Fragment Loading Failed ( e ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdownload And Save Manifest ( ĊĠĠĠ Ġcredentials : ĠAccount Authentication Credentials ? ĊĠ Ġ): ĠPlayer Manifest Ġ{ ĊĠĠĠ Ġval Ġstrategy Ġ= ĊĠĠĠĠĠ Ġthis . player Parameters . to Manifest Strategy ( ĊĠĠĠĠĠĠĠ Ġthis . str ategies , ĊĠĠĠĠĠĠĠ Ġthis . listener :: on Loading Fragment Is Network Connectivity Available , ĊĠĠĠĠĠĠĠ Ġcredentials , ĊĠĠĠĠĠĠĠ Ġthis . require Context (). cacheDir ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġwhen Ġ( val Ġstrategy Result Ġ= Ġstrategy . execute ()) Ġ{ ĊĠĠĠĠĠ Ġis ĠTask Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ ĠAudio Book Helpers . save Manifest ( ĊĠĠĠĠĠĠĠĠĠ Ġprofiles Ġ= Ġthis . profiles , ĊĠĠĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġthis . player Parameters . book ID , ĊĠĠĠĠĠĠĠĠĠ Ġmanifest URI Ġ= Ġthis . player Parameters . manifest URI , ĊĠĠĠĠĠĠĠĠĠ Ġmanifest Ġ= Ġstrategy Result . result . fulfilled ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġstrategy Result . result . manifest ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġis ĠTask Result . Failure Ġ-> ĊĠĠĠĠĠĠĠ Ġthrow ĠIOException ( strategy Result . message ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ