package Ġnet . shadow xc raft . smart lights Ċ Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . util . Log Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ object ĠOrdering Manager Ġ{ ĊĊĠĠĠ Ġval Ġled Strip Positions Ġ= ĠArrayList < String >() ĊĠĠĠ Ġval Ġled Strip Group Positions Ġ= ĠArrayList < String >() ĊĠĠĠ Ġval Ġcolor Sequence Positions Ġ= ĠArrayList < String >() ĊĊĠĠĠ Ġfun Ġget Led Strip Positions ( is Group : ĠBoolean ) Ġ: ĠArrayList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Group ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġled Strip Group Positions ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġled Strip Positions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Led Strip Orders ( is Group : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpositions Ġ= Ġget Led Strip Positions ( is Group ) ĊĠĠĠĠĠĠĠ ĠLog . println ( Log . DEBUG , Ġ" Controller Manager ", Ġ" Num Ġled Ġstri ps Ġin Ġposition Ġlist : Ġ" Ġ+ Ġpositions . size Ġ+ Ġ". ĠGroup : Ġ" Ġ+ Ġis Group ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( controller Ġin ĠController Manager . controllers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġled Stri ps Ġ= Ġif Ġ( is Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . led Strip Groups ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . led Stri ps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( led Strip Ġin Ġled Stri ps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( led Strip . value . id Ġ! in Ġpositions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Controller Manager ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Missing ĠLED ĠStrip Ġposition . ĠAdding .... ĠGroup : Ġ$ is Group " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositions . add ( led Strip . value . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġpositions . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠDB Helper ( controller . act ). writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= Ġget TableName ( is Group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Col Name Ġ= Ġget Position Col Name ( is Group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġled Strip Id Col Name Ġ= ĠgetId Col Name ( is Group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( position Col Name , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( led Strip Id Col Name , Ġled Strip . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . insert With On Conflict ( tableName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġvalues , ĠSQLite Database . CONF LI CT _ REPLACE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmove LED Strip Order ( from : ĠInt , Ġto : ĠInt , Ġis Group : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . println ( Log . DEBUG , Ġ" Ordering Manager ", Ġ" Moving ĠLED Ġposition . ĠGroup : Ġ$ is Group ") ĊĠĠĠĠĠĠĠ Ġ// ĠSwap ĊĠĠĠĠĠĠĠ Ġval Ġpositions Ġ= Ġget Led Strip Positions ( is Group ) ĊĠĠĠĠĠĠĠ Ġval Ġled Strip Ġ= Ġpositions . remove At ( from ) ĊĠĠĠĠĠĠĠ Ġpositions . add ( to , Ġled Strip ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġall Ġlocations Ġfrom Ġthe Ġminimum Ġof Ġthe Ġold Ġlocation Ġto Ġthe Ġend . ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġif Ġ( from Ġ< Ġto ) Ġfrom Ġelse Ġto ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠDB Helper ( BLE Controller Manager . activity !!. base Context ). writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= Ġget TableName ( is Group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Col Name Ġ= Ġget Position Col Name ( is Group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġled Strip Id Col Name Ġ= ĠgetId Col Name ( is Group ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmin Ġuntil Ġpositions . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Led Strip Ġ= Ġpositions [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues 1 Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . println ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . DEBUG , Ġ" Controller Manager ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Saving Ġ$ cur Led Strip Ġto Ġposition Ġ$ i " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues 1 . put ( position Col Name , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues 1 . put ( led Strip Id Col Name , Ġcur Led Strip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . insert With On Conflict ( tableName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġvalues 1 , ĠSQLite Database . CONF LI CT _ REPLACE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . delete ( tableName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Col Name Ġ+ Ġ" Ġ>= Ġ" Ġ+ Ġpositions . size , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget TableName ( is Group : ĠBoolean ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSQL TableData . LED Strip Group Display Options Entry . TABLE _ NAME ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSQL TableData . LED Strip Display Options Entry . TABLE _ NAME ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Position Col Name ( is Group : ĠBoolean ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSQL TableData . LED Strip Group Display Options Entry . COLUMN _ NAME _ POSITION ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSQL TableData . LED Strip Display Options Entry . COLUMN _ NAME _ POSITION ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetId Col Name ( is Group : ĠBoolean ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSQL TableData . LED Strip Group Display Options Entry . COLUMN _ NAME _ LED STRIP _ ID ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSQL TableData . LED Strip Display Options Entry . COLUMN _ NAME _ LED STRIP _ ID ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Color Sequence Order () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpositions Ġ= Ġcolor Sequence Positions ĊĠĠĠĠĠĠĠ Ġfor Ġ( controller Ġin ĠController Manager . controllers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Sequences Ġ= ĠShared Data . colors Sequences ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sequence Ġin Ġcolor Sequences ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sequence . value . id Ġ! in Ġpositions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Controller Manager ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Missing Ġcolor Ġsequence Ġposition . ĠAdding .... " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositions . add ( sequence . value . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġpositions . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠDB Helper ( controller . act ). writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= ĠSQL TableData . Color Sequence Display Options Entry . TABLE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Col Name Ġ= ĠSQL TableData . Color Sequence Display Options Entry . COLUMN _ NAME _ POSITION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Sequence Id Col Name Ġ= ĠSQL TableData . Color Sequence Display Options Entry . COLUMN _ NAME _ COLOR _ SEQUENCE _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( position Col Name , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( color Sequence Id Col Name , Ġsequence . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . insert With On Conflict ( tableName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġvalues , ĠSQLite Database . CONF LI CT _ REPLACE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmove Color Sequence Order ( from : ĠInt , Ġto : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . println ( Log . DEBUG , Ġ" Ordering Manager ", Ġ" Moving ĠColor ĠSequence Ġposition .") ĊĠĠĠĠĠĠĠ Ġ// ĠSwap ĊĠĠĠĠĠĠĠ Ġval Ġpositions Ġ= Ġcolor Sequence Positions ĊĠĠĠĠĠĠĠ Ġval Ġcolor Sequence Ġ= Ġpositions . remove At ( from ) ĊĠĠĠĠĠĠĠ Ġpositions . add ( to , Ġcolor Sequence ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġall Ġlocations Ġfrom Ġthe Ġminimum Ġof Ġthe Ġold Ġlocation Ġto Ġthe Ġend . ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġif Ġ( from Ġ< Ġto ) Ġfrom Ġelse Ġto ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠDB Helper ( BLE Controller Manager . activity !!. base Context ). writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= ĠSQL TableData . Color Sequence Display Options Entry . TABLE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Col Name Ġ= ĠSQL TableData . Color Sequence Display Options Entry . COLUMN _ NAME _ POSITION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Sequence Id Col Name Ġ= ĠSQL TableData . Color Sequence Display Options Entry . COLUMN _ NAME _ COLOR _ SEQUENCE _ ID ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmin Ġuntil Ġpositions . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Color Sequence Ġ= Ġpositions [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues 1 Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . println ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . DEBUG , Ġ" Controller Manager ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Saving Ġ$ cur Color Sequence Ġto Ġposition Ġ$ i " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues 1 . put ( position Col Name , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues 1 . put ( color Sequence Id Col Name , Ġcur Color Sequence ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . insert With On Conflict ( tableName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġvalues 1 , ĠSQLite Database . CONF LI CT _ REPLACE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . delete ( tableName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Col Name Ġ+ Ġ" Ġ>= Ġ" Ġ+ Ġpositions . size , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }