package Ġcom . tak em ori . br ail le . ui . home Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Transform ations Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . tak em ori . br ail le . Br ail le Ċ import Ġcom . tak em ori . br ail le . Letter Ċ import Ġjava . util . Locale Ċ import Ġkotlin . experimental . and Ċ import Ġkotlin . experimental . inv Ċ import Ġkotlin . experimental . or Ċ import Ġkotlin . experimental . xor Ċ Ċ class ĠHome ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġ_ word Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġword : ĠLive Data < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ word ĊĊĊĠĠĠ Ġprivate Ġval Ġ_ br ail le Byte Ġ= ĠMutable LiveData < Byte >() ĊĠĠĠ Ġval Ġbr ail le Byte : ĠLive Data < Byte > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ br ail le Byte ĊĊĠĠĠ Ġval Ġbr ail le To Letter Ġ= ĠTransform ations . map ( br ail le Byte ) Ġ{ Ġinput : ĠByte ? Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġinput ?. toInt () ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn @ map ĠBr ail le . get Letter ( i ) Ġ// TODO Ġadd Ġlogic Ġto Ġdetermine Ġif Ġit Ġshould Ġshow Ġletter Ġor Ġabbre v Ġetc . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ letters List Ġ= ĠMutable LiveData < Mutable List < Letter >>() ĊĠĠĠ Ġval Ġletters List : ĠLive Data < Mutable List < Letter >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ letters List ĊĊĠĠĠ Ġval Ġletters ToString Ġ= ĠTransform ations . map ( letters List ) Ġ{ Ġinput : ĠMutable List < Letter > Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( show As Dot s . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstringBuilder : ĠStringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( letter : Letter Ġin Ġinput ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( letter . unicode _ dots ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠstringBuilder . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġreturn @ map ĠBr ail le . translate Letters ( input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ show As Dot s Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġshow As Dot s : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ show As Dot s ĊĊĊĊ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ word . value Ġ= Ġ" la " ĊĠĠĠĠĠĠĠ Ġ_ br ail le Byte . value Ġ= Ġ 0 b 0 ĊĠĠĠĠĠĠĠ Ġ_ letters List . value Ġ= Ġmutable ListOf < Letter >() ĊĠĠĠĠĠĠĠ Ġ_ show As Dot s . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠFlip Ġthe ĠviewModel 's Ġbit Ġdetermined Ġby Ġthe Ġnumber ĊĠĠĠĠ Ġ* Ġ Ġbutton Ġpressed Ġ( values Ġ 1 Ġt 0 Ġ 6 ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Experimental Std lib Api ĊĠĠĠ Ġfun Ġbutton Flip ( num : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmask : ĠByte Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġmask Ġ= Ġmask . rotate Left ( num Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ_ br ail le Byte . value Ġ= Ġ_ br ail le Byte . value ?. xor ( mask ) Ċ // ĠĠĠĠĠĠĠ Ġ_ br ail le Byte . value Ġ= Ġ_ br ail le Byte . value ?. plus ( mask )?. to Byte () ĊĠĠĠĠĠĠĠ ĠLog . i (" Home ViewModel . kt ", Ġ" Button Ġpressed : Ġ$ num Ġ\ n Byte Ġvalue : Ġ$ br ail le Byte ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Std lib Api ĊĠĠĠ Ġfun Ġbutton Flip ( num : ĠInt , Ġon : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmask : ĠByte Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġmask Ġ= Ġ Ġmask . rotate Left ( num - 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( on ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġnum Ġbit Ġto Ġ_ br ail le Byte ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ br ail le Byte . value Ġ= Ġ_ br ail le Byte . value ?. or ( mask ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremove Ġthe Ġnum Ġbit Ġto Ġ_ br ail le Byte ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ br ail le Byte . value Ġ= Ġ_ br ail le Byte . value ?. and ( mask . inv ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġletter : ĠLetter Ġ= ĠBr ail le . get Letter ( br ail le Byte . value !!. toInt ()) ĊĠĠĠĠĠĠĠ ĠLog . i (" Home ViewModel . kt ", Ġ" Retrie ved Ġvalue Ġ: ${ letter . letter }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġcalled Ġfrom Ġplus Ġbutton , Ġto Ġtake Ġin Ġthe Ġcurrent Ġdisplayed ĊĠĠĠĠ Ġ* Ġbr ail le Ġbyte Ġand Ġthen Ġstore Ġthat Ġletter Ġin Ġa Ġlocal Ġlist Ġto Ġbuild Ġa Ġstring . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġadd Input () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġletter : ĠLetter Ġ= Ġbr ail le To Letter . value ?: ĠLetter (- 1 , Ġ" ERROR ", Ġ- 1 , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġletter : ĠLetter Ġ= ĠBr ail le . get Letter ( br ail le Byte . value ?. toInt ()) ĊĊĠĠĠĠĠĠĠ Ġ// clear Buttons () ĊĠĠĠĠĠĠĠ Ġ_ letters List . value ?. add ( letter ) ĊĠĠĠĠĠĠĠ Ġ_ letters List . notify Observer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġthe Ġlast Ġletter Ġin Ġ_ letters List ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġremove Letter () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ letters List . value !!. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ letters List . value ?. remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ letters List . notify Observer () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear Ġall Ġletters Ġin Ġthe Ġmain Ġtext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġclear All Letters () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ letters List . value !!. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ letters List . value ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ letters List . notify Observer () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSwitch Ġtext Ġdisplay Ġmode Ġand Ġthen Ġre - trigger ĊĠĠĠĠ Ġ* Ġthe Ġstring Ġtransformer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetShow As Dot s ( isChecked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ show As Dot s . value Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ_ letters List . notify Observer () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġfrom Ġs . o . Ġhttps :// stackoverflow . com / questions / 4 7 9 4 1 5 3 7 / notify - observer - when - item - is - added - to - list - of - li ved ata Ċ Ġ* Ġto Ġtrigger Ġa Ġlive Data Ġupdate Ġwhen Ġlists Ġare Ġupdated . ĠOtherwise Ġjust Ġchanging Ċ Ġ* Ġan Ġitem Ġin Ġa Ġlist Ġwill Ġnot Ġcreate Ġa Ġnew Ġversion Ġnumber Ġand Ġob servers Ġare Ġnot Ġnotified . Ċ Ġ*/ Ċ private Ġfun Ġ< T > ĠMutable LiveData < T >. notify Observer () Ġ{ ĊĠĠĠ Ġthis . value Ġ= Ġthis . value Ċ } Ċ