package Ġcom . f ory ou and me . research kit . step . hole peg Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . lifecycle . view model . compose . viewModel Ċ import Ġcom . f ory ou and me . R Ċ import Ġcom . f ory ou and me . entity . task . hole peg . Hole P eg Point Position Ċ import Ġcom . f ory ou and me . entity . task . hole peg . Hole P eg Sub Step Ċ import Ġcom . f ory ou and me . entity . task . hole peg . Hole P eg Target Position Ċ import Ġcom . f ory ou and me . research kit . step . Block Ċ import Ġcom . f ory ou and me . research kit . step . compose . Step Header Ċ import Ġcom . f ory ou and me . research kit . step . hole peg . Hole P eg Action .* Ċ import Ġcom . f ory ou and me . ui . compose . For You And Me Theme Ċ import Ġcom . f ory ou and me . ui . compose . to Color Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . on Each Ċ Ċ @ Composable Ċ fun ĠH ole P eg ( ĊĠĠĠ ĠviewModel : ĠH ole P eg ViewModel Ġ= ĠviewModel (), ĊĠĠĠ ĠonComplete : Ġ( Hole P eg State ) Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĊĠĠĠ ĠFor You And Me Theme Ġ{ ĊĊĠĠĠĠĠĠĠ ĠLa unched Effect (" hole _ peg ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . events ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Event . Completed Ġ-> ĠonComplete ( viewModel . state Flow . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Ġby ĠviewModel . state Flow . collect As State () ĊĠĠĠĠĠĠĠ ĠH ole P eg ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġstate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Drag Start Ġ= Ġ{ ĠviewModel . execute ( Start Dragging ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Drag Ġ= Ġ{ ĠviewModel . execute ( On Drag ( it )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Drag End Ġ= Ġ{ ĠviewModel . execute ( End Dragging ( it )) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠH ole P eg ( ĊĠĠĠ Ġstate : ĠH ole P eg State , ĊĠĠĠ Ġon Drag Start : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġon Drag : Ġ( Float ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġon Drag End : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġattempt Ġ= Ġstate . current Attempt ĊĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( state . step ?. backgroundColor . to Color ()) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 5 0 . dp )) ĊĠĠĠĠĠĠĠ Ġif Ġ( attempt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStep Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġget Title ( title Ġ= Ġstate . step ?. title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= ĠgetDescription ( state . step , Ġattempt . step . target , Ġstate . is Dragging ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( start Ġ= Ġ 2 0 . dp , Ġend Ġ= Ġ 2 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 1 0 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ole Attempt P eg Progress ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattempt Ġ= Ġattempt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġstate . step ?. progress Color . to Color (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( start Ġ= Ġ 2 0 . dp , Ġend Ġ= Ġ 2 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Point ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattempt Ġ= Ġattempt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Color Ġ= Ġstate . step ?. point Color . to Color (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Color Ġ= Ġstate . step ?. target Color . to Color (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Drag Start Ġ= Ġon Drag Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Drag Ġ= Ġon Drag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Drag End Ġ= Ġon Drag End ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Composable Ċ private Ġfun Ġget Title ( title : ĠString ?): ĠString Ġ= ĊĠĠĠ Ġtitle Ġ?: Ġstring Resource ( id Ġ= ĠR . string . HO LE _ PEG _ title ) Ċ Ċ @ Composable Ċ private Ġfun ĠgetDescription ( ĊĠĠĠ Ġstep : ĠH ole P eg Step ?, ĊĠĠĠ Ġtarget Position : ĠH ole P eg Target Position , ĊĠĠĠ Ġis Dragging : ĠBoolean Ċ ): ĠString Ġ{ ĊĊĠĠĠ Ġval Ġstep Description Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( target Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Target Position . End Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep ?. description End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġstring Resource ( id Ġ= ĠR . string . HO LE _ PEG _ description _ end ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Target Position . End Center Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep ?. description End Center ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġstring Resource ( id Ġ= ĠR . string . HO LE _ PEG _ description _ end _ center ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Target Position . Start Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep ?. description Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġstring Resource ( id Ġ= ĠR . string . HO LE _ PEG _ description _ start ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Target Position . Start Center Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep ?. description Start Center ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġstring Resource ( id Ġ= ĠR . string . HO LE _ PEG _ description _ start _ center ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġval Ġdragging Text Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is Dragging ) Ġstep ?. description Release Ġ?: Ġstring Resource ( id Ġ= ĠR . string . HO LE _ PEG _ release ) ĊĠĠĠĠĠĠĠ Ġelse Ġstep ?. description Grab Ġ?: Ġstring Resource ( id Ġ= ĠR . string . HO LE _ PEG _ grab ) ĊĊĠĠĠ Ġreturn Ġ"$ step Description \ n $ drag ging Text " Ċ Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ private Ġfun ĠH ole P eg Preview () Ġ{ ĊĠĠĠ ĠH ole P eg ( ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĊĠĠĠĠĠĠĠ ĠH ole P eg State ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Step ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= ĠBlock ("", ĠColor . BLACK ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . WHITE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Color Ġ= ĠColor . BLACK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Color Ġ= ĠColor . BLACK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Color Ġ= ĠColor . MAG ENT A , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Color Ġ= ĠColor . MAG ENT A , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Color Ġ= ĠColor . MAG ENT A , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Steps Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Sub Step ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Point Position . Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH ole P eg Target Position . End Center ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ }