package Ġcom . an ib al vent ura . another note . ui . note Ċ Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . core . app . Activity Compat . invalidate Options Menu Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ import Ġcom . an ib al vent ura . another note . R Ċ import Ġcom . an ib al vent ura . another note . adapters . Note Adapter Ċ import Ġcom . an ib al vent ura . another note . data . models . Archive Model Ċ import Ġcom . an ib al vent ura . another note . data . models . Trash Model Ċ import Ġcom . an ib al vent ura . another note . data . view model . Note ViewModel Ċ import Ġcom . an ib al vent ura . another note . data . view model . Shared ViewModel Ċ import Ġcom . an ib al vent ura . another note . databinding . Fragment Note Binding Ċ import Ġcom . an ib al vent ura . another note . utils . Constants . NOTE _ EMPTY Ċ import Ġcom . an ib al vent ura . another note . utils . Constants . NOTE _ LAYOUT Ċ import Ġcom . an ib al vent ura . another note . utils . Constants . NOTE _ TO _ ARCH IVE Ċ import Ġcom . an ib al vent ura . another note . utils . Constants . NOTE _ TO _ TR ASH Ċ import Ġcom . an ib al vent ura . another note . utils . Constants . SW I PE _ ARCH IVE Ċ import Ġcom . an ib al vent ura . another note . utils . Constants . SW I PE _ DELETE Ċ import Ġcom . an ib al vent ura . another note . utils . Swipe Item Ċ import Ġcom . an ib al vent ura . another note . utils . hide Soft Keyboard Ċ import Ġcom . an ib al vent ura . another note . utils . shared Pref Ċ import Ġjp . was ab eef . recyclerview . anim ators . Landing Animator Ċ Ċ class ĠNote Fragment Ġ: ĠFragment (), ĠSearch View . On Query Text Listener Ġ{ ĊĊĠĠĠ Ġ// ĠData Binding . ĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Note Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġ// ĠView Models . ĊĠĠĠ Ġprivate Ġval Ġnote ViewModel : ĠNote ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġshared ViewModel : ĠShared ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġ// ĠRecyclerView . ĊĠĠĠ Ġprivate Ġval Ġadapter : ĠNote Adapter Ġby Ġlazy Ġ{ ĠNote Adapter () Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment . ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Note Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . shared ViewModel Ġ= Ġshared ViewModel ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetup ĠRecyclerView . ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġnotify Ġevery Ġtime Ġthe Ġdatabase Ġchange . ĊĠĠĠĠĠĠĠ Ġnote ViewModel . get Database . observe ( view Lifecycle Owner , Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . check If Note IsEmpty ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setData ( data ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġmenu . ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠHide ĠSoft ĠKeyboard . ĊĠĠĠĠĠĠĠ Ġhide Soft Keyboard ( require Activity ()) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġbinding . note RecyclerView ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġlayout Ġview . ĊĠĠĠĠĠĠĠ Ġwhen Ġ( shared Pref ( require Context ()). getBoolean ( NOTE _ LAYOUT , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( require Activity ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġre cyclerView . layout Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt agger ed Grid LayoutManager ( 2 , ĠSt agger ed Grid LayoutManager . VERTICAL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . item Animator Ġ= ĠLand ing Animator (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Duration Ġ= Ġ 3 0 0 Ġ// ĠM illiseconds ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSw ipe Ġto Ġdelete . ĊĠĠĠĠĠĠĠ Ġswipe To Archive Or Delete ( SW I PE _ DELETE , Ġre cyclerView ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSw ipe Ġto Ġarchive . ĊĠĠĠĠĠĠĠ Ġswipe To Archive Or Delete ( SW I PE _ ARCH IVE , Ġre cyclerView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswipe To Archive Or Delete ( action : ĠInt , Ġre cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġbackground : ĠDrawable ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġicon : ĠDrawable ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġbackground Ġand Ġicon Ġdepending Ġon Ġaction . ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS WI PE _ DELETE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . get Drawable ( resources , ĠR . drawable . bg _ swipe _ delete , Ġnull ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠResources Compat . get Drawable ( resources , ĠR . drawable . ic _ trash , Ġnull ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS WI PE _ ARCH IVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . get Drawable ( resources , ĠR . drawable . bg _ swipe _ archive , Ġnull ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠResources Compat . get Drawable ( resources , ĠR . drawable . ic _ archive , Ġnull ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġswipe ToDelete CallBack Ġ= Ġobject Ġ: ĠSw ipe Item ( action , Ġbackground , Ġicon , Ġrequire Context ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġaction : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Item Ġ= Ġadapter . data List [ view Holder . adapter Position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarchive Item Ġ= ĠArchive Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . data List [ view Holder . adapter Position ]. id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . data List [ view Holder . adapter Position ]. title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . data List [ view Holder . adapter Position ]. description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . data List [ view Holder . adapter Position ]. color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrash Item Ġ= ĠTr ash Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . data List [ view Holder . adapter Position ]. id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . data List [ view Holder . adapter Position ]. title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . data List [ view Holder . adapter Position ]. description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . data List [ view Holder . adapter Position ]. color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS WI PE _ ARCH IVE Ġ-> Ġshared ViewModel . move Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNOTE _ TO _ ARCH IVE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarchive Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrash Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS WI PE _ DELETE Ġ-> Ġshared ViewModel . move Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNOTE _ TO _ TR ASH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarchive Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrash Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Removed ( view Holder . adapter Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Touch Helper Ġ= ĠItem Touch Helper ( swipe ToDelete CallBack ) ĊĠĠĠĠĠĠĠ Ġitem Touch Helper . attach To RecyclerView ( re cyclerView ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġrequired Ġoptions . ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ main _ search ). setEnabled ( true ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ main _ list ). setEnabled ( true ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ main _ grid ). setEnabled ( true ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ main _ overflow ). setEnabled ( true ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ main _ sort _ by ). setEnabled ( true ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ main _ delete _ all ). setEnabled ( true ). isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsearch Ġ= Ġmenu . find Item ( R . id . menu _ main _ search ). action View Ġas ? ĠSearch View ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmenu . find Item ( R . id . menu _ main _ list ) ĊĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= Ġmenu . find Item ( R . id . menu _ main _ grid ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġsearch Ġfunction . ĊĠĠĠĠĠĠĠ Ġsearch ?. is Submit Button Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsearch ?. setOn Query Text Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠChange Ġoption Ġwhen Ġchange Ġre cycler view Ġlayout . ĊĠĠĠĠĠĠĠ Ġwhen Ġ( shared Pref ( require Context ()). getBoolean ( NOTE _ LAYOUT , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . setEnabled ( false ). isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid . setEnabled ( true ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . setEnabled ( true ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid . setEnabled ( false ). isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Prepare Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ main _ list Ġ-> Ġchange Layout View ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ main _ grid Ġ-> Ġchange Layout View ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ main _ sort _ title Ġ-> Ġnote ViewModel . sortBy Title . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setData ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ main _ sort _ creation Ġ-> Ġnote ViewModel . sortBy Creation . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setData ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ main _ sort _ color Ġ-> Ġnote ViewModel . sortBy Color . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setData ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ main _ delete _ all Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . empty Database ( require Context (), ĠNOTE _ EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . item Animator Ġ= ĠLand ing Animator (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Duration Ġ= Ġ 3 0 0 Ġ// ĠM illiseconds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġprivate Ġfun Ġchange Layout View ( change : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Pref ( require Context ()). edit (). put Boolean ( NOTE _ LAYOUT , Ġchange ). apply () ĊĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĠĠĠĠĠĠĠ Ġinvalidate Options Menu ( require Activity ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠMethods Ġfor Ġsearch Ġoption . ĊĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( query Ġ!= Ġnull ) Ġsearch T rough Database ( query ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( query Ġ!= Ġnull ) Ġsearch T rough Database ( query ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSet Ġsearch Ġoption . ĊĠĠĠ Ġprivate Ġfun Ġsearch T rough Database ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnote ViewModel . search Database ("% $ query % "). observe ( this , Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ?. let Ġ{ Ġadapter . setData ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDestroy Ġall Ġreferences Ġof Ġthe Ġfragment Ġto Ġavoid Ġmemory Ġleak . ĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }