package Ġat . sh ock bytes . d ante . ui . fragment Ċ Ċ import Ġandroid . app . Activity . RESULT _ OK Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġat . sh ock bytes . d ante . R Ċ import Ġat . sh ock bytes . d ante . databinding . Fragment Import Books Storage Binding Ċ import Ġat . sh ock bytes . d ante . importer . Import Stats Ċ import Ġat . sh ock bytes . d ante . importer . Importer Ċ import Ġat . sh ock bytes . d ante . injection . App Component Ċ import Ġat . sh ock bytes . d ante . ui . adapter . Importer Adapter Ċ import Ġat . sh ock bytes . d ante . ui . fragment . dialog . Import Approval Dialog Fragment Wrapper Ċ import Ġat . sh ock bytes . d ante . ui . view model . Import Books Storage ViewModel Ċ import Ġat . sh ock bytes . d ante . util . Exception Handlers Ċ import Ġat . sh ock bytes . d ante . util . addTo Ċ import Ġat . sh ock bytes . d ante . util . viewModel Of Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . io . InputStream Ċ import Ġjava . nio . charset . Charset Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠImport Books Storage Fragment Ġ: ĠBase Fragment < Fragment Import Books Storage Binding >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate View Binding ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġroot : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ Ġattach To Root : ĠBoolean ĊĠĠĠ Ġ): ĠFragment Import Books Storage Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFragment Import Books Storage Binding . inflate ( in flater , Ġroot , Ġattach To Root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġvm Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠImport Books Storage ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġimport Adapter : ĠImport er Adapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠImport er Adapter ( require Context (), ĠImport er . values (), ĠviewModel :: start Import ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠviewModel Of ( vm Factory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġvb . rv Fragment Import . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġimport Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinject To Graph ( app Component : ĠApp Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp Component . inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind ViewModel () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Import State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe (:: handle Import State , ĠException Handlers :: default ExceptionHandler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Import State ( import State : ĠImport Books Storage ViewModel . Import State ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( import State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠImport Books Storage ViewModel . Import State . Ask For File Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ask For File Activity ( import State . mime Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠImport Books Storage ViewModel . Import State . Parsed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Parsed State ( import State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠImport Books Storage ViewModel . Import State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( import State . throwable . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImport Books Storage ViewModel . Import State . Imported Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . import _ success )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . confirm Import () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Parsed State ( state : ĠImport Books Storage ViewModel . Import State . Parsed ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( state . import Stats ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠImport Stats . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImport Approval Dialog Fragment Wrapper ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance ( state . provider Res , Ġstate . provider Icon Res , Ġstate . import Stats ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Apply Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . import () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener ( viewModel :: reset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImport Stats . No Books Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . import _ no _ books ), ĠgetString ( R . string . got _ it ), Ġshow In defin ite Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . reset () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Ask For File Activity ( mime Type : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType ( mime Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Category ( Intent . CATEGORY _ OP ENABLE ) ĊĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠREQUEST _ SA F ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ SA F Ġ&& ĠresultCode Ġ== ĠRESULT _ OK Ġ&& Ġdata Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking ( Dispatch ers . Un conf ined ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . data ?. read ( require Context ()). let ( viewModel :: parse FromString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠUri . read ( context : ĠContext ): ĠString Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . open InputStream ( this @ read )?. use Ġ{ Ġstream Ġ-> Ġstream . read Text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Could Ġnot Ġopen Ġ$ this ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠInputStream . read Text ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 ): ĠString Ġ= Ġread Bytes (). toString ( charset ) ĊĊĠĠĠ Ġoverride Ġfun Ġun bind ViewModel () Ġ= ĠUnit ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ SA F Ġ= Ġ 0 x 2 3 4 9 ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠImport Books Storage Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠImport Books Storage Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ