package Ġat . sh ock bytes . d ante . ui . fragment Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . H aptic Feedback Constants Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . widget . do On TextChanged Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . local broadcast manager . content . Local Broadcast Manager Ċ import Ġandroidx . palette . graphics . Palette Ċ import Ġat . sh ock bytes . d ante . R Ċ import Ġat . sh ock bytes . d ante . core . book . Book Entity Ċ import Ġat . sh ock bytes . d ante . core . book . Book State Ċ import Ġat . sh ock bytes . d ante . core . book . Languages Ċ import Ġat . sh ock bytes . d ante . injection . App Component Ċ import Ġat . sh ock bytes . d ante . ui . activity . core . Tint able Back Navig able Activity Ċ import Ġat . sh ock bytes . d ante . ui . adapter . Manual Add Language Spinner Adapter Ċ import Ġat . sh ock bytes . d ante . core . image . Image Loader Ċ import Ġat . sh ock bytes . d ante . core . image . Image Loading Callback Ċ import Ġat . sh ock bytes . d ante . ui . activity . Manual Add Activity Ċ import Ġat . sh ock bytes . d ante . ui . view model . Manual Add ViewModel Ċ import Ġat . sh ock bytes . d ante . core . Constants . ACTION _ BOOK _ CREATED Ċ import Ġat . sh ock bytes . d ante . core . Constants . EXTRA _ BOOK _ CREATED _ STATE Ċ import Ġat . sh ock bytes . d ante . databinding . Fragment Manual Add Binding Ċ import Ġat . sh ock bytes . d ante . util . D ante Utils . dp To Pixel F Ċ import Ġat . sh ock bytes . d ante . util . addTo Ċ import Ġat . sh ock bytes . d ante . util . setVisible Ċ import Ġat . sh ock bytes . d ante . util . viewModel Of Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠAuthor : Ġ ĠMartin ĠM ache iner Ċ Ġ* ĠDate : ĠĠĠĠ 3 0 . 0 8 . 2 0 1 8 Ċ Ġ*/ Ċ class ĠManual Add Fragment Ġ: ĠBase Fragment < Fragment Manual Add Binding >(), ĠImage Loading Callback Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate View Binding ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġroot : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ Ġattach To Root : ĠBoolean ĊĠĠĠ Ġ): ĠFragment Manual Add Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFragment Manual Add Binding . inflate ( in flater , Ġroot , Ġattach To Root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġvm Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġimage Loader : ĠImage Loader ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠManual Add ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠviewModel Of ( vm Factory ) ĊĊĠĠĠĠĠĠĠ Ġarguments ?. get Parcelable < Book Entity >( ARG _ BOOK _ ENTITY _ UPDATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let ( viewModel :: initialize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Views () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvb . card Image Manual Add . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . perform H aptic Feedback ( H aptic Feedback Constants . VIRTUAL _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . pick Image ( require Activity ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvb . edit Text Manual Add Title . do On TextChanged Ġ{ Ġtext , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ? ĠT int able Back Navig able Activity <* >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . tint Title ( text . toString (). toUpperCase ( Locale . getDefault ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvb . btn Manual Add Up coming . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . perform H aptic Feedback ( H aptic Feedback Constants . VIRTUAL _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore Book ( Book State . READ _ L ATER ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvb . btn Manual Add Current . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . perform H aptic Feedback ( H aptic Feedback Constants . VIRTUAL _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore Book ( Book State . READ ING ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvb . btn Manual Add Done . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . perform H aptic Feedback ( H aptic Feedback Constants . VIRTUAL _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore Book ( Book State . READ ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvb . btn Update Book Discard . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . perform H aptic Feedback ( H aptic Feedback Constants . VIRTUAL _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( R . string . update _ book _ discard _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. message ( R . string . update _ book _ discard _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. icon ( R . drawable . ic _ delete ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. corner Radius ( require Context (). dp To Pixel F ( 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. positive Button ( R . string . discard ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvb . btn Update Book Save . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . perform H aptic Feedback ( H aptic Feedback Constants . VIRTUAL _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Book () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup Language Spinner () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinject To Graph ( app Component : ĠApp Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp Component . inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Observer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġun bind ViewModel () Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġon Image Loading Failed ( e : ĠException ?) Ġ= ĠTim ber . e ( e ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Image Resource Ready ( resource : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Loading Indicator () ĊĠĠĠĠĠĠĠ Ġcolor Toolbar From Resource ( resource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading Indicator () Ġ{ ĊĠĠĠĠĠĠĠ Ġvb . img View Manual Add . setVisible ( true ) ĊĠĠĠĠĠĠĠ Ġvb . pb Manual Add Image Upload . setVisible ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcolor Toolbar From Resource ( resource : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( resource Ġas ? ĠBitmap Drawable )?. bitmap ?. let ( Palette :: from )?. generate Ġ{ Ġpalette Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Bar Color Ġ= Ġpalette ?. light Mut ed Sw atch ?. rgb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Bar TextColor Ġ= Ġpalette ?. light Mut ed Sw atch ?. title TextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Bar Color Ġ= Ġpalette ?. dark Mut ed Sw atch ?. rgb ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ? ĠT int able Back Navig able Activity <* >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . tint System Bar sWith Text ( action Bar Color , Ġaction Bar TextColor , Ġstatus Bar Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Observer () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠviewModel . getImage State (). observe ( this , ĠObserver (:: handle Image State )) ĊĊĠĠĠĠĠĠĠ ĠviewModel . getImage Loading State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe (:: handle Image Loading State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . getView State (). observe ( this , ĠObserver (:: handle ViewState )) ĊĊĠĠĠĠĠĠĠ ĠviewModel . on Add Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe (:: handle Add Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Image State ( image State : ĠManual Add ViewModel . Image State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( image State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠManual Add ViewModel . Image State . Thumbnail Uri Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Loader . load Image Uri ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage State . uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . img View Manual Add , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ placeholder _ cover , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircular Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Handle Values Ġ= ĠPair ( first Ġ= Ġfalse , Ġsecond Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManual Add ViewModel . Image State . No Image Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Loader . load Image Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ placeholder _ cover , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . img View Manual Add ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Image Loading State ( image Loading State : ĠManual Add ViewModel . Image Loading State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( image Loading State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠManual Add ViewModel . Image Loading State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . pb Manual Add Image Upload . setVisible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . img View Manual Add . setVisible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠManual Add ViewModel . Image Loading State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . pb Manual Add Image Upload . setVisible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . img View Manual Add . setVisible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManual Add ViewModel . Image Loading State . Success Ġ-> ĠUnit Ġ// ĠNot Ġneeded ... ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle ViewState ( view State : ĠManual Add ViewModel . ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManual Add ViewModel . ViewState . Manual Add Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . container Manual Add Buttons . setVisible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . container Update Book Buttons . setVisible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠManual Add ViewModel . ViewState . Update Book Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . container Manual Add Buttons . setVisible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . container Update Book Buttons . setVisible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate Book Data Views ( view State . book Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Add Event ( event : ĠManual Add ViewModel . Add Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠManual Add ViewModel . Add Event . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Book Created Broadcast ( event . created Book State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠManual Add ViewModel . Add Event . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . manual _ add _ error ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( android . R . string . ok ), Ġtrue ) Ġ{ Ġthis . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠManual Add ViewModel . Add Event . Updated Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Book Updated Broadcast ( event . update Book State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Book Created Broadcast ( created Book State : ĠBook State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ACTION _ BOOK _ CREATED ). putExtra ( EXTRA _ BOOK _ CREATED _ STATE , Ġcreated Book State ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Book Updated Broadcast ( book State : ĠBook State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Book Detail Fragment . ACTION _ BOOK _ CHANGED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Manual Add Activity . EXTRA _ UPDATED _ BOOK _ STATE , Ġbook State ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Broadcast ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. send Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate Book Data Views ( book Entity : ĠBook Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( book Entity ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvb . edit Text Manual Add Title . setText ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvb . edit Text Manual Add Subtitle . setText ( sub Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvb . edit Text Manual Add Authors . setText ( author ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvb . edit Text Manual Add Pages . setText ( page Count . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvb . edit Text Manual Add Published Date . setText ( published Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvb . edit Text Manual Add Is bn . setText ( isbn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvb . edit Text Manual Add Summary . setText ( summary ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguages Ġ= ĠLanguage s . values () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguage Idx Ġ= Ġlanguages . indexOf First Ġ{ Ġit . code Ġ== Ġlanguage Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( language Idx Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . spinner Manual Add Language . setSelection ( language Idx , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Language Spinner () Ġ{ ĊĠĠĠĠĠĠĠ Ġvb . spinner Manual Add Language . adapter Ġ= ĠManual Add Language Spinner Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage s . values () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Book () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . update Book ( gather Book Update Data ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstore Book ( state : ĠBook State ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . store Book ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgather Book Update Data (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgather Book Update Data (): ĠManual Add ViewModel . Book Update Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġvb . edit Text Manual Add Title . text ?. toString () ĊĠĠĠĠĠĠĠ Ġval Ġsub Title : ĠString ? Ġ= Ġvb . edit Text Manual Add Subtitle . text ?. toString () ĊĠĠĠĠĠĠĠ Ġval Ġauthors Ġ= Ġvb . edit Text Manual Add Authors . text ?. toString () ĊĠĠĠĠĠĠĠ Ġval Ġpage Count Ġ= Ġvb . edit Text Manual Add Pages . text ?. toString ()?. toInt OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġpublished Date Ġ= Ġvb . edit Text Manual Add Published Date . text ?. toString () ĊĠĠĠĠĠĠĠ Ġval Ġis bn Ġ= Ġvb . edit Text Manual Add Is bn . text ?. toString () ĊĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= Ġvb . edit Text Manual Add Summary . text ?. toString () ĊĊĠĠĠĠĠĠĠ Ġval Ġlanguages Ġ= ĠLanguage s . values () ĊĠĠĠĠĠĠĠ Ġval Ġl Idx Ġ= Ġvb . spinner Manual Add Language . selected Item Position . coerce In ( 0 .. languages . size ) ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Ġ= Ġlanguages [ l Idx ]. code ĊĊĠĠĠĠĠĠĠ Ġreturn ĠManual Add ViewModel . Book Update Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġauthors , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Count Ġ= Ġpage Count , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Title Ġ= Ġsub Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublished Date Ġ= Ġpublished Date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis bn Ġ= Ġis bn , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Ġ= Ġlanguage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġsummary , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail Address Ġ= ĠviewModel . getImage Uri () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARG _ BOOK _ ENTITY _ UPDATE Ġ= Ġ" arg _ book _ entity _ update " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( updated Book Entity : ĠBook Entity ?): ĠManual Add Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠManual Add Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( ARG _ BOOK _ ENTITY _ UPDATE , Ġupdated Book Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }