package Ġcz . bu di k pet . b ache lor work . screens . email ListView Ċ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . constraint . Constraint Layout Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . support . v 7 . widget . helper . Item Touch Helper Ċ import Ġandroid . view .* Ċ import Ġcz . bu di k pet . b ache lor work . My Application Ċ import Ġcz . bu di k pet . b ache lor work . R Ċ import Ġcz . bu di k pet . b ache lor work . di . util . My ViewModel Factory Ċ import Ġcz . bu di k pet . b ache lor work . screens . calendar ListView . Cal endars List Swipe Delete Ċ import Ġcz . bu di k pet . b ache lor work . screens . main . Main ViewModel Ċ import Ġcz . bu di k pet . b ache lor work . util . Margin Item Decoration Ċ import Ġcz . bu di k pet . b ache lor work . util . to Dp Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠEmail List Fragment Ġ: ĠFragment (), ĠCal endars List Swipe Delete . Callback Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" MY _${ this . java Class . simple Name }" ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠMy ViewModel Factory ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġemails List : ĠRecyclerView ĊĊĠĠĠ Ġ/** ĠUndo Ġsn ackbar . Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġsn ackbar : ĠSn ackbar Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmain Activity Layout Ġ= Ġactivity ?. findViewById < Constraint Layout >( R . id . main _ activity ) ĊĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity Layout !! , ĠgetString ( R . string . sn ackbar _ Calendar Unavailable ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( getString ( R . string . sn ackbar _ Undo )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġemails List . adapter Ġas ĠEmail ListAdapter ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. undo Delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Callback ( object Ġ: ĠSn ackbar . Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Dis missed ( sn ackbar : ĠSn ackbar , Ġevent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ!= ĠDIS MIS S _ EVENT _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUndo Ġbutton Ġwas Ġnot Ġpressed , Ġdelete Ġthe Ġcalendar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġemails List . adapter Ġas ĠEmail ListAdapter ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeleted Email Ġ= Ġadapter ?. recent ly Deleted Item ?. second ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter Ġ!= Ġnull Ġ&& Ġdeleted Email Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġcalendar Ġfrom Ġthe ĠGoogle ĠCalendar Ġservice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . un share Time table ( deleted Email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Shown ( sn ackbar : ĠSn ackbar ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn @ lazy Ġsn ackbar ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠMy Application . app Component . inject ( this ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġactivity ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Main ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠException (" Invalid ĠActivity ") ĊĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġsubscribe Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġemails List Ġ= Ġinflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . fragment _ list , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠRecyclerView ĊĠĠĠĠĠĠĠ Ġemails List . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġemails List . addItem Decoration ( Margin Item Decoration ( 4 . to Dp ( context !! ))) ĊĊĠĠĠĠĠĠĠ Ġemails List . adapter Ġ= ĠEmail ListAdapter ( context !! ) ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Touch Helper Ġ= ĠItem Touch Helper ( Cal endars List Swipe Delete ( context !! , Ġthis )) ĊĠĠĠĠĠĠĠ Ġitem Touch Helper . attach To RecyclerView ( emails List ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġemails List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?, Ġinflater : ĠMenu Inflater ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater ?. inflate ( R . menu . emails _ list _ bar , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsupport ActionBar Ġ= Ġ( activity Ġas ĠAppCompatActivity ). support ActionBar ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= ĠgetString ( R . string . sidebar _ Share Time table ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. subtitle Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . emails Sync Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Shared Emails ( viewModel . ct u Username ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . emails . observe ( this , ĠObserver Ġ{ Ġemails List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġthe Ġre cycler Ġview ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( emails List Ġ!= Ġnull Ġ&& Ġthis . emails List . adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġthis . emails List . adapter Ġas ĠEmail ListAdapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . update Values ( emails List ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠMARK : ĠSw ipe Ġto Ġdelete ĊĊĠĠĠ Ġoverride Ġfun Ġon Swipe Delete ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġemails List . adapter Ġas ĠEmail ListAdapter ? ĊĠĠĠĠĠĠĠ Ġadapter ?. removeItem ( position ) ĊĠĠĠĠĠĠĠ Ġsn ackbar . show () ĊĠĠĠ Ġ} Ċ } Ċ