package Ġcom . vs . taken otes . ui Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . activity . result . Activity Result Launcher Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . vs . taken otes . R Ċ import Ġcom . vs . taken otes . adapters . Notes Adapter Ċ import Ġcom . vs . taken otes . adapters . Notes ViewModel Ċ import Ġcom . vs . taken otes . databinding . Fragment Notes Binding Ċ import Ġcom . vs . taken otes . room . Note Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ @ Android EntryPoint Ċ class ĠNotes Fragment Ġ: ĠFragment ( R . layout . fragment _ notes ), ĠNotes Adapter . On ItemClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠNotes ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġactivity For Result : ĠActivity Result Launcher < Intent > ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠFragment Notes Binding . bind ( view ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnote Adapter Ġ= ĠNotes Adapter ( this ) ĊĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotes View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġnote Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( require Context (), Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotes Search . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . search Query . value Ġ= Ġnotes Search . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . notes . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Adapter . submit List ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactivity For Result Ġ= Ġregister For Activity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Result Contracts . Start Activity For Result () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠIntent ? Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. getString Extra (" result ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( note : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠAdd Edit Notes Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" title ", Ġnote . title ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" description ", Ġnote . description ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" id ", Ġnote . id ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" created ", Ġnote . created ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" color ", Ġnote . color ) ĊĠĠĠĠĠĠĠ Ġactivity For Result . launch ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Long Click ( note : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( require View (), Ġ" Delete ĠNote ", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Delete ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Note ( note ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( require View (), Ġ" Note ĠDeleted ", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" UN DO ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . undo Note Deletion ( note ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} Ċ }