package Ġcom . jav ad ude . movies nav ĊĊ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . annotation . Menu Res Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . navigation . Nav Directions Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ abstract Ġclass ĠUI (@ Layout Res Ġlayout Id Ġ: ĠInt , Ġ@ Menu Res Ġmenu Id Ġ: ĠInt Ġ= Ġ- 1 ) Ġ: ĠBase Fragment (- 1 , Ġlayout Id , Ġmenu Id ) Ċ Ċ abstract Ġclass ĠState ( ĊĠĠĠ Ġ@ String Res Ġtitle Id Ġ: ĠInt , ĊĠĠĠ Ġ@ Layout Res Ġlayout Id Ġ: ĠInt ) Ġ: ĠBase Fragment ( title Id , Ġlayout Id , Ġ- 1 ) Ġ{ ĊĊĠĠĠ Ġopen Ġfun Ġdo Select () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġdo Select () ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠBase Fragment (@ String Res Ġval Ġtitle Id Ġ: ĠInt , Ġ@ Layout Res Ġval Ġlayout Id Ġ: ĠInt , Ġ@ Menu Res Ġval Ġmenu Id Ġ: ĠInt ) Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġval ĠviewModel Ġby Ġactivity ViewModels < Movie ViewModel >() ĊĠĠĠĠĠĠĠ Ġ// ĠNOTE : ĠThis Ġview Ġmodel Ġinstance Ġis Ġscoped Ġto Ġthe Ġ_ activity _, Ġnot Ġthis Ġfragment , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠ Ġso Ġit Ġcan Ġshare Ġdata Ġwith Ġall Ġfragments ĊĠĠĠ Ġprivate Ġval Ġmain Activity Ġ: ĠMainActivity ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġactivity Ġas ĠMainActivity ? ĊĊĠĠĠ Ġprivate Ġval Ġmenu Actions Ġ= Ġmutable Map Of < Int , Ġ() Ġ-> ĠUnit >() ĊĠĠĠ Ġfun Ġregister Menu Handler (@ Id Res Ġmenu ItemId : ĠInt , Ġhandler : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Actions [ menu ItemId ] Ġ= Ġhandler ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( menu Id Ġ!= Ġ- 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ( title Id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. title Ġ= ĠgetString ( title Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( menu Id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( menu Id , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ) Ġ= ĊĠĠĠĠĠĠĠ Ġmenu Actions [ item . itemId ]?. let Ġ{ handler Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġsuper . on Options ItemSelected ( item ) ĊĊĠĠĠ Ġprivate Ġfun ĠClass <* >. find Nav Interface () Ġ: ĠClass < *> ? Ġ= ĊĠĠĠĠĠĠĠ Ġdeclared Classes . first OrNull Ġ{ Ġit . is Interface Ġ&& Ġit . simple Name Ġ== Ġ" Navigation " Ġ} Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuperclass ?. find Nav Interface () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( layout Id , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġsome Ġchecks Ġto Ġsee Ġif Ġwe Ġimplement Ġthe ĠUI Ġinterfaces ĊĠĠĠĠĠĠĠ Ġchild FragmentManager . fragments . filter Is Instance < UI >(). forEach Ġ{ Ġnested UI Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnested UI :: class . java . find Nav Interface ()?. let Ġ{ Ġnav Interface Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( nav Interface . isAssignableFrom ( this :: class . java )) Ġ{ Ġthrow ĠIllegalStateException ("${ nested UI . java Class . name } Ġcan Ġonly Ġbe Ġused Ġas Ġa Ġchild Ġof Ġa ĠState / UI Ġfragment Ġthat Ġimplements Ġ${ nav Interface . name }. ĠIts Ġparent Ġfragment Ġis Ġ${ this . java Class . name }") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Movie Delete Mode () Ġ= Ġmain Activity ?. start Movie Delete Mode () ĊĠĠĠ Ġfun Ġstart Actor Delete Mode () Ġ= Ġmain Activity ?. start Actor Delete Mode () ĊĠĠĠ Ġfun Ġinvalidate Action Mode () Ġ= Ġmain Activity ?. invalidate Action Mode () ĊĠĠĠ Ġfun Ġdismiss Action Mode () Ġ= Ġmain Activity ?. dismiss Action Mode () ĊĊĠĠĠ Ġfun Ġnavigate ( action Ġ: ĠNav Directions ) Ġ{ Ġview ?. find Nav Controller ()?. navigate ( action ) Ġ} ĊĊĠĠĠ Ġ// Ġadding Ġin Ġ" swipe Ġto Ġdelete " Ġcapability ĊĠĠĠ Ġ// ĠNOTE : Ġactivity !! Ġis Ġok Ġhere Ġas Ġon View Created () Ġis Ġonly Ġcalled Ġwhen ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġwe 're Ġattached Ġto Ġan ĠActivity ĊĠĠĠ Ġfun ĠRecyclerView . swipe Left ( action Ġ: Ġ( String ) Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ ĠItem Touch Helper ( Sw iper ( require Activity (), Ġaction )). attach To RecyclerView ( this ) Ċ } Ċ