package Ġorg . task . manager . presentation . book Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . icu . util . Calendar Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Auto Complete TextView Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . google . android . material . datepicker . Material DatePicker Ċ import Ġorg . k oin . android . ext . android . inject Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġorg . task . manager . R Ċ import Ġorg . task . manager . databinding . Fragment Create Book Binding Ċ import Ġorg . task . manager . domain . model . Book shop Ċ import Ġorg . task . manager . domain . model . Editor ial Ċ import Ġorg . task . manager . presentation . shared . Date Service Ċ import Ġorg . task . manager . presentation . shared . Shared ViewModel Ċ import Ġorg . task . manager . shared . Constants . DATE _ P ICK ER _ TITLE _ TEXT Ċ import Ġorg . task . manager . shared . Constants . FALSE Ċ import Ġorg . task . manager . shared . Constants . TRUE Ċ Ċ private Ġconst Ġval ĠEVENT _ TITLE _ PREFIX Ġ= Ġ" Read Ġ" Ċ private Ġconst Ġval ĠBO OK _ EVENT Ġ= Ġ" Book Ġto Ġread " Ċ Ċ class ĠCreate Book Fragment Ġ: ĠDialog Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Create Book Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnav Controller : ĠNav Controller ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshared ViewModel : ĠShared ViewModel ĊĠĠĠ Ġprivate Ġval Ġbook ViewModel : ĠBook ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġprivate Ġval Ġdate Service : ĠDate Service Ġby Ġinject () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgenre : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġeditor ial : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġeditor ial Url : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbook shop : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbook shop Url : ĠString ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . fragment _ create _ book , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġfind Nav Controller () ĊĠĠĠĠĠĠĠ Ġshared ViewModel Ġ= ĠViewModel Provider ( require Activity ()). get ( Shared ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Title Filled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis StartDate Filled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Deadline Filled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar ĠstartDate Milliseconds Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġvar Ġdeadline Milliseconds Ġ= Ġ 1 L ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġarguments ?. getString (" action ") ĊĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== Ġ" update ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . book . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . book Id . tag Ġ= Ġit . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . userId . tag Ġ= Ġit . user ?. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . title Text . setText ( it . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . author Text . setText ( it . author ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . book Genre Dropdown . setText ( it . genre ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Ġ= Ġit . genre ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . editor ial Dropdown . setText ( it . editor ial ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial Ġ= Ġit . editor ial ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial Url Ġ= Ġit . editor ial Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . book shop Dropdown . setText ( it . book shop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook shop Ġ= Ġit . book shop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook shop Url Ġ= Ġit . book shop Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . startDate Text . setText ( date Service . get Formatted Date ( it . startDate )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Milliseconds Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Service . convert Date To Milliseconds ( binding . startDate Text . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . deadline Text . setText ( date Service . get Formatted Date ( it . deadline )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeadline Milliseconds Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Service . convert Date To Milliseconds ( binding . deadline Text . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . checkBox . isChecked Ġ= Ġit . check Ġ== ĠTRUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġobserve ViewModel () ĊĊĠĠĠĠĠĠĠ Ġbook ViewModel . get Gen res () ĊĠĠĠĠĠĠĠ Ġhandle Gen res () ĊĊĠĠĠĠĠĠĠ Ġbook ViewModel . get Editor ial s () ĊĠĠĠĠĠĠĠ Ġhandle Editor ial s () ĊĊĠĠĠĠĠĠĠ Ġbook ViewModel . get Book shops () ĊĠĠĠĠĠĠĠ Ġhandle Book shops () ĊĊĠĠĠĠĠĠĠ Ġval ĠstartDate Picker Ġ= Ġget DatePicker Builder (). build () ĊĠĠĠĠĠĠĠ ĠstartDate Picker . add On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Milliseconds Ġ= Ġit Ġ+ Ġdate Service . add Hours ( 1 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . startDate Text . setText ( startDate Picker . header Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdeadline Picker Ġ= Ġget DatePicker Builder (). build () ĊĠĠĠĠĠĠĠ Ġdeadline Picker . add On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeadline Milliseconds Ġ= Ġit Ġ+ Ġdate Service . add Hours ( 1 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . deadline Text . setText ( deadline Picker . header Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . title Text . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Title Filled Ġ= Ġit ?. toString ()?. isNotBlank () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Save Enabled ( is Title Filled , Ġis StartDate Filled , Ġis Deadline Filled ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . startDate Text . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis StartDate Filled Ġ= Ġit ?. toString ()?. isNotBlank () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Save Enabled ( is Title Filled , Ġis StartDate Filled , Ġis Deadline Filled ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . deadline Text . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Deadline Filled Ġ= Ġit ?. toString ()?. isNotBlank () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Save Enabled ( is Title Filled , Ġis StartDate Filled , Ġis Deadline Filled ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . startDate Text . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! startDate Picker . is Added ) ĠstartDate Picker . show ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent FragmentManager , Ġ" start _ date _ picker _ tag " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . deadline Text . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! deadline Picker . is Added ) Ġdeadline Picker . show ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent FragmentManager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" deadline _ picker _ tag " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . save . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . book Id . tag Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook ViewModel . update Book ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . book Id . tag . toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . title Text . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . author Text . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook shop , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook shop Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Service . convertTo Instant ( startDate Milliseconds ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Service . convertTo Instant ( deadline Milliseconds ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . checkBox . isChecked ) ĠTRUE Ġelse ĠFALSE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . userId . tag . toString (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook ViewModel . create Book ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġbinding . title Text . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġbinding . author Text . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Ġ= Ġgenre , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial Ġ= Ġeditor ial , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial Url Ġ= Ġeditor ial Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook shop Ġ= Ġbook shop , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook shop Url Ġ= Ġbook shop Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġdate Service . convertTo Instant ( startDate Milliseconds ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeadline Ġ= Ġdate Service . convertTo Instant ( deadline Milliseconds ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ= Ġif Ġ( binding . checkBox . isChecked ) ĠTRUE Ġelse ĠFALSE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook ViewModel . create Calendar Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Milliseconds , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEVENT _ TITLE _ PREFIX Ġ+ Ġbinding . title Text . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBO OK _ EVENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġbook ViewModel . calendar Events . observe ( view Lifecycle Owner , Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbook ViewModel . book . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . fragment _ book ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġdialog ?. window ?. setLayout ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Gen res () Ġ{ ĊĠĠĠĠĠĠĠ Ġbook ViewModel . genres . observe ( view Lifecycle Owner , Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgen res Names Ġ= Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is L iter ary Ġ!= ĠFALSE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . name Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgen res Dropdown Ġ= Ġbuild Gen res Dropdown ( genres Names ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Gen res Item Select Event ( genres Dropdown ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Gen res Dropdown ( genres Names : ĠList < String >): ĠAuto Complete TextView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dropdown _ menu _ popup _ item , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgen res Names ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgen res Dropdown Ġ= Ġbinding . book Genre Dropdown ĊĠĠĠĠĠĠĠ Ġgen res Dropdown . setAdapter ( adapter ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgen res Dropdown ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Gen res Item Select Event ( genres Dropdown : ĠAuto Complete TextView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgen res Dropdown . setOn ItemClickListener Ġ{ Ġadapter View , Ġ_, Ġpos , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Ġ= Ġadapter View . getItem At Position ( pos ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . hide Keyboard () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Editor ial s () Ġ{ ĊĠĠĠĠĠĠĠ Ġbook ViewModel . editor ial s . observe ( view Lifecycle Owner , Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor ial Names Ġ= Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . name Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor ial s Dropdown Ġ= Ġbuild Editor ial s Dropdown ( editor ial Names ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Editor ial s Item Select Event ( editor ial s Dropdown , Ġlist ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Editor ial s Dropdown ( editor ial Names : ĠList < String >): ĠAuto Complete TextView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dropdown _ menu _ popup _ item , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial Names ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġeditor ial s Dropdown Ġ= Ġbinding . editor ial Dropdown ĊĠĠĠĠĠĠĠ Ġeditor ial s Dropdown . setAdapter ( adapter ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġeditor ial s Dropdown ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Editor ial s Item Select Event ( ĊĠĠĠĠĠĠĠ Ġeditor ial s Dropdown : ĠAuto Complete TextView , ĊĠĠĠĠĠĠĠ Ġeditor ial s : ĠList < Editor ial > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor ial s Dropdown . setOn ItemClickListener Ġ{ Ġadapter View , Ġ_, Ġpos , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial Ġ= Ġadapter View . getItem At Position ( pos ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ial Url Ġ= Ġeditor ial s [ pos ]. url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . hide Keyboard () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Book shops () Ġ{ ĊĠĠĠĠĠĠĠ Ġbook ViewModel . book shops . observe ( view Lifecycle Owner , Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook shop Names Ġ= Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . name Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook shop Dropdown Ġ= Ġbuild Book shops Dropdown ( book shop Names ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Book shops Item Select Event ( book shop Dropdown , Ġlist ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Book shops Dropdown ( book shop Names : ĠList < String >): ĠAuto Complete TextView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dropdown _ menu _ popup _ item , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook shop Names ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbook shop Dropdown Ġ= Ġbinding . book shop Dropdown ĊĠĠĠĠĠĠĠ Ġbook shop Dropdown . setAdapter ( adapter ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbook shop Dropdown ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Book shops Item Select Event ( ĊĠĠĠĠĠĠĠ Ġbook shop Dropdown : ĠAuto Complete TextView , ĊĠĠĠĠĠĠĠ Ġbook shops : ĠList < Book shop > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbook shop Dropdown . setOn ItemClickListener Ġ{ Ġadapter View , Ġ_, Ġpos , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook shop Ġ= Ġadapter View . getItem At Position ( pos ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook shop Url Ġ= Ġbook shops [ pos ]. url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . hide Keyboard () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġget DatePicker Builder (): ĠMaterial DatePicker . Builder < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠMaterial DatePicker . Builder . date Picker () ĊĠĠĠĠĠĠĠ Ġbuilder . setSelection ( Calendar . getInstance (). time In Millis ) ĊĠĠĠĠĠĠĠ Ġbuilder . setTitle Text ( DATE _ P ICK ER _ TITLE _ TEXT ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Save Enabled ( ĊĠĠĠĠĠĠĠ Ġis Title Filled : ĠBoolean , Ġis StartDate Filled : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġis Deadline Filled : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . save . isEnabled Ġ= Ġis Title Filled Ġ&& Ġis StartDate Filled Ġ&& Ġis Deadline Filled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠView . hide Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġcontext . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( window Token , Ġ 0 ) ĊĠĠĠ Ġ} Ċ Ċ }