package Ġcom . car ol mus y ok a . note app . ui . note . notes Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ 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 . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . launch Ċ import Ġcom . car ol mus y ok a . note app . R Ċ import Ġcom . car ol mus y ok a . note app . databinding . Notes Fragment Binding Ċ import Ġcom . car ol mus y ok a . note app . data . room . model . Notes Ċ import Ġcom . car ol mus y ok a . note app . utils . hide Ċ import Ġcom . car ol mus y ok a . note app . utils . show Ċ import Ġkotlinx . android . synt hetic . main . item _ post _ notes .* Ċ Ċ class ĠNotes Fragment Ġ: ĠFragment ( R . layout . notes _ fragment ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠNotes ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotes Adapter : ĠNotes Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ binding : ĠNotes Fragment Binding ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?, ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠNotes Fragment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ ĠsetUp RV () ĊĠĠĠĠĠĠĠ Ġ// Ġonclick Ġnavigate Ġto Ġadd Ġnotes ĊĠĠĠĠĠĠĠ Ġbinding . btn Add Notes . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ notes Fragment _ to _ add Notes Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġobserver Ġdata Ġchange Ġfor Ġsaved Ġnotes ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Saved Notes (). observe ( view Lifecycle Owner ) Ġ{ Ġnotes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Notes Loaded ( notes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġonclick Ġnavigate Ġto Ġadd Ġnotes ĊĠĠĠĠĠĠĠ Ġnotes Adapter . setOn ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable (" notes ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ notes Fragment _ to _ notes Details Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġinit Ġitem Ġtouch Ġcallback Ġfor Ġswipe Ġaction ĊĠĠĠĠĠĠĠ Ġval Ġitem Touch Helper Callback Ġ= Ġobject Ġ: ĠItem Touch Helper . Simple Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġitem Ġposition Ġ& Ġdelete Ġnotes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= ĠviewHolder . adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotes Ġ= Ġnotes Adapter . differ . current List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Notes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . character , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( view , ĠgetString ( R . string . note _ deleted _ msg ), ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Action ( getString ( R . string . undo )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . insert Notes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . character , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġattach Ġswipe Ġcallback Ġto Ġrv ĊĠĠĠĠĠĠĠ ĠItem Touch Helper ( item Touch Helper Callback ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattach To RecyclerView ( binding . notes Rv ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Notes Loaded ( notes : ĠList < Notes >) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . empty State Layout . run Ġ{ Ġif Ġ( notes . isNull OrEmpty ()) Ġshow () Ġelse Ġhide () Ġ} ĊĠĠĠĠĠĠĠ Ġnotes Adapter . differ . submit List ( notes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp RV () Ġ{ ĊĠĠĠĠĠĠĠ Ġnotes Adapter Ġ= ĠNotes Adapter () ĊĠĠĠĠĠĠĠ Ġbinding . notes Rv . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġnotes Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . ui _ menu , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġitem Ġstate ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Checked Ġ= ĠviewModel . get UI Mode . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġmenu . find Item ( R . id . action _ night _ mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġis Checked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset UI Mode ( item , Ġis Checked ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġaction Ġbar Ġitem Ġclicks Ġhere . ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ night _ mode Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġ! item . isChecked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset UI Mode ( item , Ġitem . isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset UI Mode ( item : ĠMenuItem , Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ YES ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save To DataStore ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setIcon ( R . drawable . ic _ night ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ NO ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save To DataStore ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setIcon ( R . drawable . ic _ day ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ