package Ġzero . friends . g ost op calculator . ui . pre condition Ċ Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . compose . Back Handler Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . Lazy List State Ċ import Ġandroidx . compose . foundation . lazy . items Indexed Ċ import Ġandroidx . compose . foundation . lazy . remember Lazy List State Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . res . color Resource Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . text . input . TextField Value Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġandroidx . h ilt . navigation . compose . h ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġzero . friends . domain . model . Player Ċ import Ġzero . friends . g ost op calculator . R Ċ import Ġzero . friends . g ost op calculator . ui . common . Center Text Top Bar Ċ import Ġzero . friends . g ost op calculator . ui . common . Go Stop Extra Button Ċ import Ġzero . friends . g ost op calculator . ui . common . Title Outlined TextField Ċ import Ġzero . friends . g ost op calculator . ui . common . background . April Background Ċ import Ġzero . friends . g ost op calculator . ui . dialog . Name Edit Dialog Ċ import Ġzero . friends . g ost op calculator . util . Tab Keyboard Down Modifier Ċ Ċ private Ġsealed Ġinterface ĠPlayer Click Event Ġ{ ĊĠĠĠ Ġobject ĠBack Ġ: ĠPlayer Click Event ĊĠĠĠ Ġobject ĠAdd Player Ġ: ĠPlayer Click Event ĊĠĠĠ Ġclass ĠDelete Player ( val Ġplayer : ĠPlayer ) Ġ: ĠPlayer Click Event ĊĠĠĠ Ġclass ĠEdit Player ( val Ġplayer : ĠPlayer ) Ġ: ĠPlayer Click Event ĊĠĠĠ Ġclass ĠNext ( val ĠgroupName : ĠString ) Ġ: ĠPlayer Click Event Ċ } Ċ Ċ @ Composable Ċ fun ĠPlayer Screen ( ĊĠĠĠ ĠviewModel : ĠPlayer ViewModel Ġ= Ġh ilt ViewModel (), ĊĠĠĠ Ġon Next : Ġ( players : ĠList < Player >, Ġgame Name : ĠString ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Back : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠ Ġval Ġscaffold State Ġ= Ġremember Sca ffold State () ĊĠĠĠ Ġval Ġui State Ġby ĠviewModel . get Ui State (). collect As State () ĊĊĠĠĠ Ġvar Ġediting Player Ġby Ġremember Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable State Of < Player ? >( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠLa unched Effect ( true ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . error (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġit , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠBack Handler ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Back () ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠPlayer Screen ( ĊĠĠĠĠĠĠĠ Ġscaffold State , ĊĠĠĠĠĠĠĠ Ġui State , ĊĠĠĠ Ġ) Ġ{ Ġclick Event Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( click Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Click Event . Add Player Ġ-> ĠviewModel . add Player () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Click Event . Back Ġ-> Ġon Back () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlayer Click Event . Delete Player Ġ-> ĠviewModel . remove Player ( click Event . player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlayer Click Event . Next Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Next ( ui State . players , Ġclick Event . groupName . if Empty Ġ{ Ġui State . currentTime Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlayer Click Event . Edit Player Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġediting Player Ġ= Ġclick Event . player ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( editing Player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠName Edit Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠviewModel , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġrequire NotNull ( editing Player ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClose Ġ= Ġ{ Ġediting Player Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠPlayer Screen ( ĊĠĠĠ Ġscaffold State : ĠScaffold State , ĊĠĠĠ Ġui State : ĠPlayer Ui State , ĊĠĠĠ Ġclick Event : Ġ( Player Click Event ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠTab Keyboard Down Modifier (), ĊĠĠĠĠĠĠĠ Ġscaffold State Ġ= Ġscaffold State , ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCenter Text Top Bar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠString . format ( string Resource ( id Ġ= ĠR . string . game _ setting _ title ), Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Ġ= Ġ{ Ġclick Event . invoke ( Player Click Event . Back ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġgame Name Ġby Ġremember Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable State Of ( TextField Value ("")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠApril Background ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( id Ġ= ĠR . string . player _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Title Ġ= Ġstring Resource ( id Ġ= ĠR . string . player _ description ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Text Ġ= Ġstring Resource ( id Ġ= ĠR . string . next ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Enabled Ġ= Ġui State . players . size Ġ> Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġclick Event ( Player Click Event . Next ( game Name . text )) Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTitle Outlined TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( id Ġ= ĠR . string . group _ name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgame Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Ġ= Ġui State . currentTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . text . length Ġ<= Ġ 1 5 ) Ġgame Name Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . over _ game _ name _ alert ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Lazy Column ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Index Ġ= Ġui State . scroll Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayers Ġ= Ġui State . players , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Event Ġ= Ġclick Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠPlayer Lazy Column ( ĊĠĠĠ Ġscroll Index : ĠInt , ĊĠĠĠ Ġscroll State : ĠLazy List State Ġ= Ġremember Lazy List State (), ĊĠĠĠ Ġplayers : ĠList < Player >, ĊĠĠĠ Ġclick Event : Ġ( Player Click Event ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ ĠLa unched Effect ( scroll Index ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscroll State . scrollTo Item ( scroll Index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠLazy Column ( state Ġ= Ġscroll State , Ġcontent Padding Ġ= ĠPadding Values ( top Ġ= Ġ 3 0 . dp , Ġbottom Ġ= Ġ 1 2 . dp )) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . player ), ĠfontSize Ġ= Ġ 1 6 . sp , ĠfontWeight Ġ= ĠFontWeight . Bold ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( players . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . info _ player _ add ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 4 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġitems Indexed ( items Ġ= Ġplayers ) Ġ{ Ġindex , Ġplayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Item ( index , Ġplayer , Ġclick Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGo Stop Extra Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . add _ new _ player ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( top Ġ= Ġ 1 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġclick Event ( Player Click Event . Add Player ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠPlayer Item ( index : ĠInt , Ġplayer : ĠPlayer , Ġclick Event : Ġ( Player Click Event ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Between , ĊĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRow ( vertical Alignment Ġ= ĠAlignment . Center Vert ically ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ( index Ġ+ Ġ 1 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Center Vert ically ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 6 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolor Resource ( id Ġ= ĠR . color . orange y _ red ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġplayer . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Center Vert ically ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( end Ġ= Ġ 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 6 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolor Resource ( id Ġ= ĠR . color . ner o ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ Ġclick Event ( Player Click Event . Edit Player ( player )) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ mode _ edit _ black ), Ġcontent Description Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ Ġclick Event ( Player Click Event . Delete Player ( player )) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ delete _ black ), Ġcontent Description Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ private Ġfun ĠPlayer Item Pre View () Ġ{ ĊĠĠĠ ĠPlayer Item ( index Ġ= Ġ 0 , Ġplayer Ġ= ĠPlayer ( name Ġ= Ġ" hello "), Ġclick Event Ġ= Ġ{}) Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ private Ġfun ĠPlayer Preview () Ġ{ ĊĠĠĠ ĠPlayer Screen ( ĊĠĠĠĠĠĠĠ Ġscaffold State Ġ= Ġremember Sca ffold State (), ĊĠĠĠĠĠĠĠ Ġui State Ġ= ĠPlayer Ui State (), ĊĠĠĠ Ġ) Ġ{} Ċ }