package Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . select unit Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . R Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . databinding . Units Fragment Binding Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . list detail . Edit Item Dialog Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . list detail . Item Drag Listener Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . list detail . Item Touch Helper Callback Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . main . AppBar Ui State Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . main . MainActivity Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . main . MainActivity Impl Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . utils . Injector Utils Ċ import Ġcom . gmail . uia 0 5 9 4 6 6 . lis ka . utils . hide Keyboard Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ Ċ class ĠSelect Units Fragment Ġ: ĠFragment (), ĠUnits Adapter . Listener , ĠItem Drag Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠUnits Fragment Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠSelect Units ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġitem Touch Helper : ĠItem Touch Helper ĊĊĠĠĠ Ġprivate Ġval Ġadapter Ġ= ĠUnits Adapter ( this , Ġthis ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠUnits Fragment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ( require Activity () Ġas ĠMainActivity Impl ). support ActionBar ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Home As Up Indicator ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup ViewModel () ĊĠĠĠĠĠĠĠ Ġsetup Observer s () ĊĠĠĠĠĠĠĠ Ġsetup On Back Pressed () ĊĠĠĠĠĠĠĠ Ġsetup Adapter () ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġadapter . setData ( viewModel . state Adapter ) ĊĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . add On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dy Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . request Focus () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġitem Touch Helper Ġ= ĠItem Touch Helper ( Item Touch Helper Callback ( adapter )) ĊĠĠĠĠĠĠĠ Ġitem Touch Helper . attach To RecyclerView ( binding . re cyclerView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . run Back . observe ( view Lifecycle Owner , Ġ{ Ġrun Back Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( run Back Ġ== Ġtrue ) Ġfind Nav Controller (). navigate Up () ĊĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . adapter Mode . observe ( view Lifecycle Owner , Ġ{ Ġmode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ!= Ġnull ) Ġswitch Adapter ( mode ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswitch Adapter ( mode : ĠUnits Adapter . Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnits Adapter . Mode . EDIT Ġ-> Ġsetup Edit Mode () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnits Adapter . Mode . FA V OR ITES Ġ-> setup F avorites Mode () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnits Adapter . Mode . SELECT Ġ-> Ġ Ġsetup Select Mode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Sn ackBar ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsn ackBar Ġ= ĠSn ackbar . make ( binding . list Detailed Content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠ Ġsn ackBar . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Select Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠgetString ( R . string . units _ select _ app bar ) ĊĠĠĠĠĠĠĠ Ġrender App bar ( AppBar Ui State . Array With Title ( title )) ĊĠĠĠĠĠĠĠ Ġbinding . divider . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . edit Text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . edit Text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . include . text . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġadapter . setup Mode ( Units Adapter . Mode . SELECT ) ĊĠĠĠĠĠĠĠ Ġrequire Activity (). invalidate Options Menu (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup F avorites Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠgetString ( R . string . units _ fav s _ app bar ) ĊĠĠĠĠĠĠĠ Ġrender App bar ( AppBar Ui State . Array With Title ( title )) ĊĊĠĠĠĠĠĠĠ Ġbinding . divider . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . edit Text . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . save Image Btn . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġbinding . include . text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġupdate Caption () ĊĊĠĠĠĠĠĠĠ Ġadapter . setup Mode ( Units Adapter . Mode . FA V OR ITES ) ĊĠĠĠĠĠĠĠ Ġrequire Activity (). invalidate Options Menu (); Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Edit Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠgetString ( R . string . units _ edit _ app bar ) ĊĠĠĠĠĠĠĠ Ġrender App bar ( AppBar Ui State . Array With Title ( title )) ĊĊĠĠĠĠĠĠĠ Ġbinding . divider . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . edit Text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . save Image Btn . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . include . text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . include . text . text Ġ= ĠgetString ( R . string . units _ edit _ caption ) ĊĊĠĠĠĠĠĠĠ Ġsetup EditText () ĊĠĠĠĠĠĠĠ Ġadapter . setup Mode ( Units Adapter . Mode . EDIT ) ĊĠĠĠĠĠĠĠ Ġrequire Activity (). invalidate Options Menu () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender App bar ( state : ĠApp Bar Ui State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmain Activity Ġ= Ġactivity Ġas ĠMainActivity ĊĠĠĠĠĠĠĠ Ġmain Activity . render App bar ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Factory Ġ= ĠInject or Utils . provide ViewModel Factory ( require Activity (). application ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this , ĠviewModel Factory )[ Select Units ViewModel :: class . java ] ĊĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġarguments ?. getString (" mode ") ?. let Ġ{ ĠUnits Adapter . Mode . valueOf ( it ) Ġ} Ġ?: Ġthrow Ġ ĠException (" ÐĿ Ðµ ĠÐ·Ð°Ð´ Ð°Ð½ ĠÑĢ ÐµÐ¶ Ð¸Ð¼ ĠÐ¾ÑĤ Ð¾Ð±ÑĢÐ°Ð¶ ÐµÐ½Ð¸Ñı Ġmode ") ĊĠĠĠĠĠĠĠ ĠviewModel . start ( mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . clear () ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . units , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( viewModel . adapter Mode . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnits Adapter . Mode . EDIT Ġ-> Ġ Ġconfigure Menu For Edit ( menu ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnits Adapter . Mode . FA V OR ITES Ġ-> Ġconfigure Menu F avorites ( menu ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnits Adapter . Mode . SELECT Ġ-> Ġconfigure Menu Select ( menu ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Menu Select ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ add _ mode ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ select _ favorites ). isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Menu F avorites ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ add _ mode ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ select _ favorites ). isVisible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Menu For Edit ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ add _ mode ). isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ select _ favorites ). isVisible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . run Back ( adapter . request State ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ add _ mode Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . enable Edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ select _ favorites Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . enable F avorites Select () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup On Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Callback ( view Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOn Back Pressed Callback ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . run Back ( adapter . request State ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup EditText () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . edit Text . setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id : ĠInt , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ NEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Text ( binding . edit Text . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Editor ActionListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . save Image Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Text ( binding . edit Text . text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Text ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . isBlank () ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . is Contain Units ( text ) Ġ-> Ġdisplay Sn ackBar ( R . string . units _ equals _ unit _ sn ak bar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġadd Item ( text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Item ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . add Unit ( text . trim ()) ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . scrollTo Position ( adapter . getLast Index ()) ĊĠĠĠĠĠĠĠ Ġbinding . edit Text . text ?. clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Caption () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . include . text . text Ġ= ĠgetString ( R . string . units _ fav s _ caption , adapter . getSize F avorites ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Limit ed () Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Sn ackBar ( R . string . units _ no _ more _ four _ sn ak bar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Clicked Edit ( text : ĠString , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠgetString ( R . string . units _ edit _ title _ dialog ) ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠEdit Item Dialog . newInstance ( text Ġ= Ġtext , Ġtitle Ġ= Ġtitle ) ĊĠĠĠĠĠĠĠ Ġdialog . on Ok Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Text Ġ= Ġdialog . edit Text . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter . is Contain Units ( new Text )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Sn ackBar ( R . string . units _ equals _ unit _ sn ak bar ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( new Text . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . change Position ( old Text Ġ= Ġtext , Ġnew Text Ġ= Ġnew Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog . show ( require Activity (). support FragmentManager , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide Keyboard Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonSelect Clicked ( unit : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . save Selected ( unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Drag ( view Holder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Touch Helper . start Drag ( view Holder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Fav s () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Caption () ĊĠĠĠ Ġ} Ċ }