package Ġcom . dv inc . not ep ad . presentation . ui . not ep ad Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . dv inc . core . extension . safe Launch Ċ import Ġcom . dv inc . core . extension . update Ċ import Ġcom . dv inc . core . ui . Base ViewModel Ċ import Ġcom . dv inc . not ep ad . R Ċ import Ġcom . dv inc . not ep ad . common . DEFAULT _ NOTE _ ID Ċ import Ġcom . dv inc . not ep ad . domain . use case . not ep ad . Not ep ad UseCase Ċ import Ġcom . dv inc . not ep ad . presentation . mapper . Note Presentation Mapper Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠNot ep ad ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġnot ep ad UseCase : ĠNot ep ad UseCase , ĊĠĠĠ Ġprivate Ġval Ġnote Mapper : ĠNote Presentation Mapper Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Not ep ad ViewModel " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġview State Ġ= ĠMutable LiveData ( Not ep ad ViewState ()) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġload Notes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Note Item Click ( note Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnote Nav Direction Ġ= ĠNot ep ad Fragment Directions . to Note Fragment ( note Id ) ĊĠĠĠĠĠĠĠ Ġnavigate To ( note Nav Direction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon New Note Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠZero Ġis Ġdefault Ġvalue Ġbecause ĠSafe Args Ġdoesn 't Ġsupport Ġnull Ġvalue Ġfor ĠLong ĊĠĠĠĠĠĠĠ Ġval Ġnote Nav Direction Ġ= ĠNot ep ad Fragment Directions . to Note Fragment ( DEFAULT _ NOTE _ ID ) ĊĠĠĠĠĠĠĠ Ġnavigate To ( note Nav Direction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Note Delete ( note Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . safe Launch ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot ep ad UseCase . delete Note ( note Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( R . string . note _ successfully _ deleted ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMessage ( R . string . error _ while _ de leting _ note ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). e ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Notes () Ġ{ ĊĠĠĠĠĠĠĠ Ġnot ep ad UseCase . get Notes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotes Ġ= Ġnote Mapper . from Domain To Ui ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . update Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes Ġ= Ġnotes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Stub View Visible Ġ= Ġnotes . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMessage ( R . string . error _ while _ load _ data _ from _ db ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). e ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( viewModel Scope ) ĊĠĠĠ Ġ} Ċ } Ċ