package Ġcom . on ew eek apps . s als aco ach we ar os . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . V ibration Effect Ċ import Ġandroid . support . we arable . activity . W ear able Activity Ċ import Ġandroid . widget . Adapter View . On ItemClickListener Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ListView Ċ import Ġcom . on ew eek apps . s als aco ach we ar os . R Ċ import Ġcom . on ew eek apps . s als aco ach we ar os . adapters . V ibr ator Adapter Ċ import Ġcom . on ew eek apps . s als aco ach we ar os . adapters . V ibr ator Hardware Adapter Ċ import Ġcom . on ew eek apps . s als aco ach we ar os . models . Move Ċ import Ġcom . on ew eek apps . s als aco ach we ar os . use cases . V ibration Patterns Factory Ċ import Ġcom . on ew eek apps . s als aco ach we ar os . utils . Clock Facade Ċ import Ġcom . on ew eek apps . s als aco ach we ar os . utils . Clock Facade Interface ĊĊ Ċ class ĠMainActivity Ġ: ĠW ear able Activity () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMOVE _ DURATION _ MS Ġ= Ġ 8 0 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġvi br ation Patterns Factory Ġ= ĠV ibration Patterns Factory () ĊĠĠĠ Ġprivate Ġval Ġclock Facade : ĠClock Facade Interface Ġ= ĠClock Facade () ĊĠĠĠ Ġprivate Ġval Ġvi br ator Adapter : ĠV ibr ator Adapter Ġ= ĠV ibr ator Hardware Adapter ( this ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠlistView : ĠListView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstart Button : ĠButton ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent V ibration Pattern Index Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġvi br ation Patterns : ĠArray < V ibration Effect > Ġ= ĠarrayOf () ĊĊĠĠĠ Ġprivate Ġvar Ġis Started Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnables ĠAlways - on ĊĠĠĠĠĠĠĠ Ġset Ambient Enabled () ĊĊĠĠĠĠĠĠĠ Ġ// ĠComp osition Ġroot ĊĠĠĠĠĠĠĠ Ġval Ġmoves Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" S om br ero ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠS om br ero Ġmove ", Ġ" https :// www . youtube . com / embed / A qn N Te Rs 2 Pw ", Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" El ĠU no ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠEl ĠU no Ġmove ", Ġ" https :// www . youtube . com / embed / Im w - H _ b Qb 1 c ", Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" El ĠD os ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠEl ĠD os Ġmove ", Ġ" https :// www . youtube . com / embed / W QX HN y 7 7 fg Y ", Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" Mont ana ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠS om br ero ĠMan ol ito Ġmove ", Ġ" https :// www . youtube . com / embed / A 8 MC Y k UZ RX k ", Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" C oca ĠCol a ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠC oca ĠCol a Ġmove ", Ġ" https :// www . youtube . com / embed / C 8 N 5 8 K Go G yw ", Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" K ent uck y ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠK ent uck y Ġmove ", Ġ" https :// www . youtube . com / embed / 6 CX ox c Q 3 b Ak ", Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" Tour ĠMag ico ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠT our ĠMag ico Ġmove ", Ġ" https :// www . youtube . com / embed / m G _ J 0 x Qy 8 O 8 ", Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" Vac il ala ĠV ac il ense ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠV ac il ala ĠV ac il ense Ġmove ", Ġ" https :// www . youtube . com / embed / O bl 7 1 W OO j J 4 ", Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" En ch uf ela ĠD ob le ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠEn ch uf ela ĠD ob le Ġmove ", Ġ" https :// www . youtube . com / embed / r 2 Kc M 4 wx OC 4 ", Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" Ex hib ela ĠD ob le ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠEx hib ela ĠD ob le Ġmove ", Ġ" https :// www . youtube . com / embed / o 4 nk V - 0 Ts 9 Q ", Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" C ement ario ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠC ement ario Ġmove ", Ġ" https :// www . youtube . com / embed / it B dg Uz 4 h MA ", Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove (" N udo ", Ġ" Key ĠTimes : Ġ 4 Ġ* Ġ 4 ", Ġ" The ĠN udo Ġmove ", Ġ" https :// www . youtube . com / embed / c UH jb Si QU 9 Y ", Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmoves . shuffle () ĊĊĠĠĠĠĠĠĠ Ġvi br ation Patterns Ġ= Ġvi br ation Patterns Factory . make V ibration Patterns ( moves ) ĊĊĠĠĠĠĠĠĠ ĠlistView Ġ= ĠfindViewById ( R . id . list _ view ) ĊĠĠĠĠĠĠĠ Ġstart Button Ġ= ĠfindViewById ( R . id . button ) ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . layout . simple _ list _ item _ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġ"${ it . name } Ġ( difficulty : Ġ${ it . difficulty })" Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ ĠlistView . on ItemClickListener Ġ= ĠOn ItemClickListener Ġ{ Ġparent , Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġparent . getItem At Position ( position ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġmoves . indexOf First Ġ{ Ġitem . contains ( it . name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġvi br ation Patterns [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ator Adapter . vi br ate ( pattern ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstart Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Button . text Ġ= ĠgetString ( R . string . start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Button . text Ġ= ĠgetString ( R . string . stop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Started Ġ= Ġ! is Started ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġclock Facade . invoke Repe ating ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent V ibration Pattern Index Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( current V ibration Pattern Index Ġ+ Ġ 1 ) Ġ% Ġvi br ation Patterns . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ator Adapter . vi br ate ( vi br ation Patterns [ current V ibration Pattern Index ]) ĊĠĠĠĠĠĠĠ Ġ}, ĠMOVE _ DURATION _ MS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent V ibration Pattern Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġclock Facade . stop Invoke Repe ating () ĊĠĠĠ Ġ} Ċ Ċ } Ċ