package Ġcom . ow ll ife . yout ub ebook mark . presentation . edit bookmark Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . ow ll ife . yout ub ebook mark . R Ċ import Ġcom . ow ll ife . yout ub ebook mark . core . empty Ċ import Ġcom . ow ll ife . yout ub ebook mark . domain . Bookmark Repository Ċ import Ġcom . ow ll ife . yout ub ebook mark . domain . Category Repository Ċ import Ġcom . ow ll ife . yout ub ebook mark . domain . Result Data Ċ import Ġcom . ow ll ife . yout ub ebook mark . domain . Y outube Remote Repository Ċ import Ġcom . ow ll ife . yout ub ebook mark . domain . resp . Y outube Video Resp Ċ import Ġcom . ow ll ife . yout ub ebook mark . entity . Category Ent ire VO Ċ import Ġcom . ow ll ife . yout ub ebook mark . presentation . util . Presentation Constants Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* Ġ@ author Ġow ll ife . dev Ċ Ġ* Ġ@ since Ġ 2 0 . Ġ 6 . Ġ 1 1 Ċ Ġ*/ Ċ class ĠEdit Book Mark ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġapp Context : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġcategory Repository : ĠCategory Repository , ĊĠĠĠ Ġprivate Ġval Ġbookmark Repository : ĠBook mark Repository , ĊĠĠĠ Ġprivate Ġval Ġyoutube Remote Repository : ĠY outube Remote Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINVALID _ ID : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtwo - way Ġdata Ġbinding ĊĠĠĠ Ġvar Ġmovie Url : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġprivate Ġvar Ġ_ selected Category : ĠMutable LiveData < Category Ent ire VO > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġselected Category : ĠLive Data < Category Ent ire VO > Ġ= Ġ_ selected Category ĊĊĠĠĠ Ġprivate Ġvar Ġ_ for warded Category Index : ĠMutable LiveData < Int > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġforwarded Category Index : ĠLive Data < Int > Ġ= Ġ_ for warded Category Index ĊĊĠĠĠ Ġprivate Ġvar Ġ_ movie Data : ĠMutable LiveData < Y outube Video Resp > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġmovie Data : ĠLive Data < Y outube Video Resp > Ġ= Ġ_ movie Data ĊĊĠĠĠ Ġprivate Ġvar Ġ_ category Management : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġcategory Management : ĠLive Data < Boolean > Ġ= Ġ_ category Management ĊĊĠĠĠ Ġprivate Ġvar Ġ_ hide Input Method : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġhide Input Method : ĠLive Data < Boolean > Ġ= Ġ_ hide Input Method ĊĊĠĠĠ Ġprivate Ġval Ġ_ saved ToLocal Db : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġsaved ToLocal Db : ĠLive Data < Boolean > Ġ= Ġ_ saved ToLocal Db ĊĊĠĠĠ Ġprivate Ġvar Ġ_ category List : ĠMutable LiveData < List < Category Ent ire VO >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġcategory List : ĠLive Data < List < Category Ent ire VO >> Ġ= Ġ_ category List ĊĊĠĠĠ Ġprivate Ġval Ġ_ data Loading : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġdata Loading : ĠLive Data < Boolean > Ġ= Ġ_ data Loading ĊĊĠĠĠ Ġprivate Ġval Ġ_ toast Text : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġtoast Text : ĠLive Data < String > Ġget () Ġ= Ġ_ toast Text ĊĊĠĠĠ Ġprivate Ġvar Ġ_ video Id Ġ= ĠString . empty () ĊĠĠĠ Ġprivate Ġvar Ġ_ for warded CategoryId : ĠInt ? Ġ= ĠINVALID _ ID ĊĊĠĠĠ Ġfun Ġload Category Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory List Ġ= Ġcategory Repository . observe Categories () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Args ( args : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ for warded CategoryId Ġ= Ġargs ?. getInt ( Presentation Constants . KEY _ CATEGORY _ ID ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect Forwarded Category () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ for warded Category Index . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory List . value ?. indexOf First Ġ{ Ġit . id Ġ== Ġ_ for warded CategoryId Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Movie Url TextChanged () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ hide Input Method . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Category Management () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ category Management . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġquery YouTube Video Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// movie Url . value Ġ= Ġ" https :// www . youtube . com / watch ? v = 4 bm U FR x NE Ig " ĊĠĠĠĠĠĠĠ Ġif Ġ( movie Url . value . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ toast Text . value Ġ= Ġapp Context . getString ( R . string . msg _ input _ youtube _ url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ video Id Ġ= Ġextract YouTube Video Id From Url ( movie Url . value !! ) ĊĠĠĠĠĠĠĠ Ġif Ġ(_ video Id . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ toast Text . value Ġ= Ġapp Context . getString ( R . string . msg _ input _ youtube _ url _ correct ly ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ hide Input Method . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Loading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġyoutube Remote Repository . get Movie Info (_ video Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resp Ġis ĠResult Data . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġresp . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ movie Data . value Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( resp Ġis ĠResult Data . Failure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ toast Text . value Ġ= Ġresp . exception . message !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Loading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetSelected Category ( pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Category . value Ġ= Ġcategory List . value ?. get ( pos ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ToLocal Db () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Category . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ toast Text . value Ġ= Ġapp Context . getString ( R . string . msg _ selected _ category ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Loading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Mark Entity Ġ= Ġmap Y outube Video Resp To Book Mark Entity ( movie Data . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook Mark Entity . categoryId Ġ= Ġ_ selected Category . value !!. id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook Mark Entity . video Id Ġ= Ġ_ video Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbookmark Repository . insert New Bookmark ( book Mark Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Loading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ saved ToLocal Db . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ toast Text . value Ġ= Ġapp Context . getString ( R . string . msg _ database _ inserted ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }