package Ġcom . infinity solutions . not ess ync . ViewModel Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . infinity solutions . not ess ync . Model . Note Ċ import Ġcom . infinity solutions . not ess ync . Model . Notes Dao Ċ import Ġcom . infinity solutions . not ess ync . Model . Notes Room Database Ċ import Ġcom . infinity solutions . not ess ync . Repository . Notes Repository Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠDatabase ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġquery Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġprivate Ġval Ġview Mode Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġprivate Ġval Ġnotes Dao : ĠNotes Dao Ġ= ĠNotes Room Database . get Database ( application ). notes Dao () ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠNotes Repository Ġ= ĠNotes Repository ( notes Dao ) ĊĠĠĠ Ġval Ġsearch Result List : ĠLive Data < List < Note >> Ġ= ĠTransform ations . switch Map ( query ){ search Query -> ĊĠĠĠĠĠĠĠ Ġnotes Dao . get SearchResult ( search Query ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġview List : ĠLive Data < List < Note >> Ġ= ĠTransform ations . switch Map ( view Mode ){ mode -> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġrepository . all List ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġrepository . notes List ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġrepository . todo List ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġrepository . archive List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġquery . value Ġ= Ġ" %% " ĊĠĠĠĠĠĠĠ Ġview Mode . value Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Search Query ( search Query : ĠString ){ ĊĠĠĠĠĠĠĠ Ġquery . value Ġ= Ġsearch Query ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset View Mode ( mode : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġview Mode . value Ġ= Ġmode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert ( note : ĠNote ){ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . insert ( note ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Note ById ( n Id : ĠLong ): ĠNote { ĊĠĠĠĠĠĠĠ Ġreturn Ġnotes Dao . get Note ById ( n Id ) ĊĠĠĠ Ġ} Ċ }