package Ġy as min . lu z ia . ex ret rofit Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġkotlinx . android . synt hetic . main . activity _ spell _ data .* Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġy as min . lu z ia . ex ret rofit . dao . App Database Ċ import Ġy as min . lu z ia . ex ret rofit . ext ention . toast Ċ import Ġy as min . lu z ia . ex ret rofit . model . Favorite Spell Ċ import Ġy as min . lu z ia . ex ret rofit . model . Spell Ċ Ċ class ĠSpell Data Activity Ġ: ĠAppCompatActivity (), ĠView . OnClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdatabase : ĠApp Database ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfavorite Spell s List : ĠList < Favorite Spell > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġspell : ĠSpell ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ spell _ data ) ĊĊĠĠĠĠĠĠĠ Ġinitializer () ĊĊĠĠĠĠĠĠĠ Ġval Ġspell Name Ġ= Ġintent . getString Extra (" spell Name "). toString () ĊĊĠĠĠĠĠĠĠ Ġspell Data TextView Title . text Ġ= ĠgetString ( R . string . spell _ data _ text view _ title , Ġspell Name ) ĊĊĠĠĠĠĠĠĠ Ġmake Spell Call ( spell Name ) ĊĊĠĠĠĠĠĠĠ Ġspell Data Floating Button Favorite . setOnClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( button : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( button ?. id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . spell Data Floating Button Favorite Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Spell s List Ġ= Ġdatabase !!. favorite Spell Dao (). fetch () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( favorite Spell s List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Spell Name Ġ= Ġarray ListOf < String >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġfavorite Spell s List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Spell Name . add ( favorite Spell s List [ index ]. name . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Spell Name . contains ( spell . name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Favorite Spell From Database ( spell . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Favorite Spell To Database () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Favorite Spell To Database () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitializer () Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase Ġ= ĠApp Database . open Database ( this @ Spell Data Activity ) ĊĊĠĠĠĠĠĠĠ Ġfavorite Spell s List Ġ= Ġdatabase !!. favorite Spell Dao (). fetch () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Spell Call ( spell Name : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcall Spell Data Ġ= ĠRet rofit Initializer (). spell Service (). find Spell s ByName ( transform Spell Name Into Index ( spell Name )) ĊĊĠĠĠĠĠĠĠ Ġcall Spell Data . enqueue ( object Ġ: ĠCallback < Spell > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Spell >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data TextView Searching . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data ProgressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data TextView Error . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data TextView Error . text Ġ= ĠgetString ( R . string . callback _ error _ no _ internet _ connection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Spell >, Ġresponse : ĠResponse < Spell >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data TextView Searching . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data ProgressBar . visibility Ġ= ĠView . IN VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response . is Successful ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data Floating Button Favorite . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Ġ= Ġresponse . body () Ġas ĠSpell ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextView Text ( spell ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( index Ġin Ġfavorite Spell s List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( favorite Spell s List [ index ]. name . equals ( spell . name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data Floating Button Favorite . setImage Drawable ( get Drawable ( R . drawable . button _ star _ on )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data TextView Error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell Data TextView Error . text Ġ= ĠgetString ( R . string . callback _ error _ nothing _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset TextView Text ( spell : ĠSpell ) Ġ{ ĊĠĠĠĠĠĠĠ Ġspell Data TextView Spell Name . text Ġ= Ġspell . name ĊĠĠĠĠĠĠĠ Ġspell Data TextView Spell School . text Ġ= Ġspell . school . name ĊĠĠĠĠĠĠĠ Ġspell Data TextView Spell Range . text Ġ= Ġspell . range ĊĠĠĠĠĠĠĠ Ġspell Data TextView Spell Cast ing Time . text Ġ= Ġspell . cast ing _ time ĊĊĠĠĠĠĠĠĠ Ġspell Data TextView Spell Classes . text Ġ= Ġspell . classes . join ToString (", Ġ") ĊĠĠĠĠĠĠĠ Ġspell Data TextView Spell Components . text Ġ= Ġspell . components . join ToString (", Ġ") ĊĠĠĠĠĠĠĠ Ġspell Data TextView Spell Description . text Ġ= Ġspell . desc . join ToString ("\ n \ n ") ĊĊĠĠĠĠĠĠĠ Ġif ( spell . level Ġ!= Ġ 0 ) Ġspell Data TextView Spell Level . text Ġ= Ġspell . level . toString () ĊĠĠĠĠĠĠĠ Ġif ( spell . components . contains (" M ")) Ġspell Data TextView Spell Material . text Ġ= Ġspell . material ĊĊĠĠĠĠĠĠĠ Ġif ( spell . rit ual ) Ġspell Data TextView Spell R it ual . text Ġ= ĠgetString ( R . string . string _ yes ) ĊĊĠĠĠĠĠĠĠ Ġif ( spell . con cent ration ) Ġspell Data TextView Spell Duration . text Ġ= Ġ"${ getString ( R . string . spell _ data _ text view _ spell _ duration _ con cent ration )}. Ġ${ spell . duration } Ġ" ĊĠĠĠĠĠĠĠ Ġelse Ġspell Data TextView Spell Duration . text Ġ= Ġspell . duration ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtransform Spell Name Into Index ( spell Name : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġspell Name . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( Regex ("[ /, Ġ] "), Ġ"- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" '", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Favorite Spell To Database () Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase !!. favorite Spell Dao (). store ( Favorite Spell ( null , Ġspell . name )) ĊĠĠĠĠĠĠĠ Ġspell Data Floating Button Favorite . setImage Drawable ( get Drawable ( R . drawable . button _ star _ on )) ĊĠĠĠĠĠĠĠ Ġtoast ( getString ( R . string . toast _ spell _ added _ to _ favorites )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Favorite Spell From Database ( spell Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase !!. favorite Spell Dao (). delete ByName ( spell Name ) ĊĠĠĠĠĠĠĠ Ġspell Data Floating Button Favorite . setImage Drawable ( get Drawable ( R . drawable . button _ star _ off )) ĊĠĠĠĠĠĠĠ Ġtoast ( getString ( R . string . toast _ spell _ removed _ from _ favorites )) ĊĠĠĠ Ġ} Ċ }