package Ġcom . digital . construction . notes . widget Ċ Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġcom . digital . construction . notes . R Ċ import Ġcom . digital . construction . notes . database . Notes Preferences Ċ import Ġcom . digital . construction . notes . model . Note Ċ import Ġcom . digital . construction . notes . model . Notes Repository Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġtim ber . log . Tim ber Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Note Widget Data Holder " Ċ Ċ object ĠNote Widget Data Holder Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġstores Ġall Ġof Ġthe Ġwidgets , Ġand Ġtheir Ġrespective Ġ[ Note ], Ġusing Ġthe Ġ[ Note Widget ] Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġnote Widgets Ġ= Ġmutable ListOf < Note Widget >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ) ĊĊĠĠĠĠĠĠĠ Ġinitialize Note Widgets () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠNote Widget ( val Ġwidget Id : ĠInt , Ġval Ġnote : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdelete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Widgets . remove ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Note Widget ] Ġand Ġadds Ġit Ġto Ġthe Ġ[ Set ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġwidget Id ĠThe Ġid Ġof Ġthe Ġwidget ĊĠĠĠĠ Ġ* Ġ@ param Ġnote ĠThe Ġnote Ġthat Ġcorresponds Ġto Ġthe Ġwidget ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġcreated Ġ[ Note Widget ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Widget ( widget Id : ĠInt , Ġnote : ĠNote ): ĠNote Widget Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnote Widget Ġ= ĠNote Widget ( widget Id , Ġnote ) ĊĠĠĠĠĠĠĠ Ġnote Widgets . add ( note Widget ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnote Widget ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Note Widget ] Ġassociated Ġwith Ġthe Ġwidget Ġid ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠNullPointerException ĠIf Ġthere Ġwasn 't Ġa Ġ[ Note Widget ] Ġsaved Ġwith Ġthat Ġid ĊĠĠĠĠ Ġ* Ġ@ param Ġwidget Id ĠThe Ġid Ġof Ġthe Ġwidget Ġyou Ġwant ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Note Widget ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Widget ( widget Id : ĠInt ): ĠNote Widget Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġnote Widgets . find Ġ{ Ġit . widget Id Ġ== Ġwidget Id Ġ} ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Got Ġ$ result Ġfor Ġwidget Id =$ widget Id ") ĊĠĠĠĠĠĠĠ ĠTim ber . d (" note Widgets =$ note Widgets ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġnote ĠThe Ġnote Ġthat Ġthe Ġreturned Ġwidgets Ġdisplay . ĊĠĠĠĠ Ġ* Ġ@ return ĠAn Ġ[ Array ] Ġof Ġthe Ġids Ġof Ġwidgets Ġthat Ġdisplay Ġthe Ġ[ note ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Widgets ( app Widget Manager : ĠApp Widget Manager , Ġnote : ĠNote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidget Ids Ġ= ĠNotes Preferences . get (). widget Notes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . value Ġ== Ġnote . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . key . toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to IntArray () ĊĊĠĠĠĠĠĠĠ Ġnote Widgets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . note . id Ġ== Ġnote . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . note . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġnote . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġnote . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapp Widget Manager . notify App Widget ViewData Changed ( widget Ids , ĠR . id . list _ view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġall Ġthe Ġwidgets Ġfrom Ġ[ Notes Preferences . widget Notes ] Ġand Ġpop ulates Ġ[ note Widgets ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinitialize Note Widgets () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( preference Ġin ĠNotes Preferences . get (). widget Notes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidget Id Ġ= Ġpreference . key . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Id Ġ= Ġpreference . value Ġas ĠLong ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Ġ= ĠNotes Repository . get (). get Note ( note Id ). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Widget Ġ= ĠNote Widget ( widget Id , Ġnote ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Widgets . add ( note Widget ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }