package Ġcom . d ail yst udio . dev br icks x . notebook . fragment Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . lifecycle .* Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . d ail yst udio . dev br icks x . development . Logger Ċ import Ġcom . d ail yst udio . dev br icks x . notebook . R Ċ import Ġcom . d ail yst udio . dev br icks x . notebook . db . Notebook Ċ import Ġcom . d ail yst udio . dev br icks x . notebook . model . Note ViewModel Ċ import Ġcom . d ail yst udio . dev br icks x . notebook . model . Notebook ViewModel Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠNot ebooks Fragment Ext Ġ: ĠNot ebooks List Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotebook ViewModel : ĠNotebook ViewModel ĊĊĠĠĠ Ġprivate Ġvar Ġnb Name View : ĠEditText ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġnormal Option Menu Res Id : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠR . menu . menu _ main ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġnb Name View Ġ= Ġview . findViewById ( R . id . notebook _ name ) ĊĠĠĠĠĠĠĠ Ġnb Name View ?. request Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget DataSource (): ĠFlow < List < Notebook >> Ġ{ ĊĠĠĠĠĠĠĠ Ġnotebook ViewModel Ġ= ĠViewModel Provider ( this ). get ( Notebook ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġflow Of Not ebooks Ġ= Ġnotebook ViewModel . getAll Not ebooks Ordered By LastModified Live Paged () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġflow Of Not ebooks . map Latest Ġ{ Ġnotebooks Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrapper Ġ= Ġmutable ListOf < Notebook >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( notebook Ġin Ġnotebooks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote ViewModel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider ( this @ Not ebooks Fragment Ext ). get ( Note ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotebook . notes Count Ġ= Ġnote ViewModel . count Notes ( notebook . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug (" nc : Ġ${ notebook . notes Count } Ġof Ġ$ notebook ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper . add ( notebook ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper ĊĠĠĠĠĠĠĠ Ġ}. flow On ( Dispatch ers . IO ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġactivity ?. title Ġ= ĠgetString ( R . string . app _ name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ about Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ notebooks Fragment Ext _ to _ about Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter ?. isIn Selection Mode () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġadapter ?. getSelection () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . label _ delete ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . prompt _ deletion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( Notebook ViewModel :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Notebook ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . cancel ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warn (" not Ġin Ġselection Ġmode , Ġskip ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fab Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Fab Clicked () ĊĊĠĠĠĠĠĠĠ Ġcreate Notebook () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notebook () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ: ĠView Ġ= ĠLayoutInflater . from ( context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dialog _ new _ group , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġnb Name View Ġ= Ġview . findViewById ( R . id . notebook _ name ) ĊĊĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnb Name View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug (" create Ġa Ġnew Ġnotebook : Ġ$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warn (" notebook Ġname Ġis Ġempty , Ġskip ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Positive Button ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotebook Ġ= ĠNotebook . create Note Book ( name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotebook ViewModel . insert Notebook ( notebook ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . cancel ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( re cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem : ĠNotebook , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Item Click ( re cyclerView , ĠitemView , Ġposition , Ġitem , Ġid ) ĊĊĠĠĠĠĠĠĠ ĠLogger . debug (" click Ġon Ġposition Ġ[$ position ]: Ġitem Ġ= Ġ$ item ") ĊĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider ( this @ Not ebooks Fragment Ext ). get ( Notebook ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotebook Ġ= ĠviewModel . get Notebook ( item . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug (" retrie ved Ġnotebook : Ġ$ notebook ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirection Ġ= ĠNot ebooks Fragment Ext Directions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. action Not ebooks Fragment Ext To Notes Fragment Ext ( item . id , Ġitem . name Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }