package Ġcom . example . s udoku . game čĊč Ċ import Ġandroidx . lifecycle . Mutable LiveData čĊčĊč Ċ class ĠS udoku Game Ġ{ čĊčĊĠĠĠ Ġvar Ġselected Cell LiveData Ġ= ĠMutable LiveData < Pair < Int , ĠInt >>() čĊĠĠĠ Ġvar Ġcells LiveData Ġ= ĠMutable LiveData < List < Cell >>() čĊĠĠĠ Ġvar Ġis T aking Notes LiveData Ġ= ĠMutable LiveData < Boolean >() čĊĠĠĠ Ġvar Ġhighlighted Keys LiveData Ġ= ĠMutable LiveData < Set < Int >>() čĊčĊĠĠĠ Ġprivate Ġvar Ġselected Row Ġ= Ġ 0 čĊĠĠĠ Ġprivate Ġvar Ġselected Col Ġ= Ġ 0 čĊĠĠĠ Ġprivate Ġvar Ġis T aking Notes Ġ= Ġfalse čĊčĊĠĠĠ Ġprivate Ġval Ġboard : ĠBoard čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġcells Ġ= ĠList ( 9 Ġ* Ġ 9 ) Ġ{ i Ġ-> ĠCell ( i Ġ/ Ġ 9 , Ġi Ġ% Ġ 9 , Ġi Ġ% Ġ 9 )} čĊĠĠĠĠĠĠĠ Ġcells [ 0 ]. notes Ġ= Ġmutable Set Of ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 , Ġ 7 , Ġ 8 , Ġ 9 ) čĊĠĠĠĠĠĠĠ Ġcells [ 2 1 ]. is Starting Cell Ġ= Ġtrue čĊĠĠĠĠĠĠĠ Ġboard Ġ= ĠBoard ( 9 , Ġcells ) čĊčĊĠĠĠĠĠĠĠ Ġselected Cell LiveData . post Value ( Pair ( selected Row , Ġselected Col )) čĊĠĠĠĠĠĠĠ Ġcells LiveData . post Value ( board . cells ) čĊĠĠĠĠĠĠĠ Ġis T aking Notes LiveData . post Value ( is T aking Notes ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġhandle Input ( number : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( selected Row Ġ== Ġ- 1 Ġ|| Ġselected Col Ġ== Ġ- 1 ) Ġreturn čĊĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġboard . getCell ( selected Row , Ġselected Col ) čĊĠĠĠĠĠĠĠ Ġif Ġ( cell . is Starting Cell ) Ġreturn čĊčĊĠĠĠĠĠĠĠ Ġif ( is T aking Notes ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cell . notes . contains ( number )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . notes . remove ( number ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . notes . add ( number ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlighted Keys LiveData . post Value ( cell . notes ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse { čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . value Ġ= Ġnumber čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġcells LiveData . post Value ( board . cells ) čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġfun Ġupdate Selected Cell ( row : ĠInt , Ġcol : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġboard . getCell ( selected Row , Ġselected Col ) čĊĠĠĠĠĠĠĠ Ġif Ġ(! board . getCell ( row , Ġcol ). is Starting Cell ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Row Ġ= Ġrow čĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Col Ġ= Ġcol čĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Cell LiveData . post Value ( Pair ( row , Ġcol )) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is T aking Notes ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighlighted Keys LiveData . post Value ( cell . notes ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġchange Note T aking State () Ġ{ čĊĠĠĠĠĠĠĠ Ġis T aking Notes Ġ= Ġ! is T aking Notes čĊĠĠĠĠĠĠĠ Ġis T aking Notes LiveData . post Value ( is T aking Notes ) čĊčĊĠĠĠĠĠĠĠ Ġval Ġcur Notes Ġ= Ġif Ġ( is T aking Notes ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġboard . getCell ( selected Row , Ġselected Col ). notes čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of < Int >() čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġhighlighted Keys LiveData . post Value ( cur Notes ) čĊĠĠĠ Ġ} č Ċ }