/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠO liv ier ĠPat ry Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ċ Ġ* Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ċ Ġ* Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ċ Ġ* Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ċ Ġ* Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ċ Ġ* Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , Ċ Ġ* ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES Ċ Ġ* ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . Ċ Ġ* ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY Ċ Ġ* ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , Ċ Ġ* ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE Ċ Ġ* ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġnet . op at ry . game . word le . ui . compose Ċ Ċ import Ġandroidx . compose . foundation . horizontal Scroll Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Intr insic Size Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . width Ċ import Ġandroidx . compose . foundation . remember Scroll State Ċ import Ġandroidx . compose . material . Button Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . Linear Progress Indicator Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġnet . op at ry . game . word le . Word le Stats Ċ import Ġnet . op at ry . game . word le . data . Word le Record Ċ import Ġnet . op at ry . game . word le . ui . compose . component . Next Word le Count Down Ċ import Ġnet . op at ry . game . word le . ui . compose . component . Vertical Divider Ċ import Ġnet . op at ry . game . word le . ui . compose . theme . App Icon Ċ import Ġnet . op at ry . game . word le . ui . compose . theme . color Tone 1 Ċ import Ġnet . op at ry . game . word le . ui . compose . theme . color Tone 3 Ċ import Ġnet . op at ry . game . word le . ui . compose . theme . color Tone 7 Ċ import Ġnet . op at ry . game . word le . ui . compose . theme . p ainter Resource Ċ import Ġjava . util .* Ċ import Ġkotlin . time . Experimental Time Ċ Ċ val ĠWord le Stats . highlighted Index : ĠInt ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( val Ġlast Score Index Ġ= Ġlast Score Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġin Ġv ictory Distribution . indices Ġ-> Ġlast Score Index ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 ĊĠĠĠ Ġ} Ċ Ċ @ Composable Ċ fun ĠStats Fig ures ( stats : ĠWord le Stats ) Ġ{ ĊĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠ ĠStat Cells ( stats ) ĊĊĠĠĠĠĠĠĠ ĠV ictory Distribution ( stats . play ed Count , Ġstats . v ictory Distribution , Ġstats . highlighted Index ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠStat Cells ( stats : ĠWord le Stats ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. horizontal Scroll ( remember Scroll State ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġ 2 4 . dp , Ġvertical Ġ= Ġ 8 . dp ), ĊĠĠĠĠĠĠĠ ĠArrange ment . spaced By ( 1 2 . dp , ĠAlignment . Center H orizontally ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠStat Cell (" Play ed ", Ġstats . play ed Count ) ĊĠĠĠĠĠĠĠ ĠStat Cell (" Win Ġ% ", Ġ( stats . v ictory Ratio Ġ* Ġ 1 0 0 ). toInt ()) ĊĠĠĠĠĠĠĠ ĠStat Cell (" Current \ n St reak ", Ġstats . current St reak ) ĊĠĠĠĠĠĠĠ ĠStat Cell (" Max \ n St reak ", Ġstats . best St reak ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠStat Cell ( label : ĠString , Ġvalue : ĠInt , Ġmodifier : ĠModifier Ġ= ĠModifier ) Ġ{ ĊĠĠĠ ĠColumn ( modifier , Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠV ictory Distribution ( play ed Count : ĠInt , Ġv ictory Distribution : ĠInt Array , Ġhighlighted Index : ĠInt ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġ" Guess ĠDistribution ", ĊĠĠĠĠĠĠĠ ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġmax Ġ= Ġv ictory Distribution . max OrNull () ĊĠĠĠ Ġif Ġ( max Ġ== Ġnull Ġ|| Ġplayed Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText (" No ĠData ", ĠModifier . padding ( 8 . dp )) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . padding ( horizontal Ġ= Ġ 2 4 . dp , Ġvertical Ġ= Ġ 8 . dp ). fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . spaced By ( 4 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Start ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ictory Distribution . forEach Indexed Ġ{ Ġindex , Ġcount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġif Ġ( max Ġ> Ġ 0 ) Ġcount Ġ/ Ġmax . toFloat () Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStat Progress (( index Ġ+ Ġ 1 ). toString (), Ġcount , Ġratio , Ġindex Ġ== Ġhighlighted Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠStat Progress ( label : ĠString , Ġvalue : ĠInt , Ġratio : ĠFloat , Ġis Highlight ed : ĠBoolean ) Ġ{ ĊĠĠĠ ĠRow ( vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ġhorizontal Arrange ment Ġ= ĠArrange ment . spaced By ( 4 . dp )) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . width ( 2 4 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . End ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠBox ( content Alignment Ġ= ĠAlignment . Center End ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFIXME Ġlittle Ġhack : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠProgress Ġis Ġalways Ġ 1 0 0 % Ġbut Ġla id Ġout Ġto Ġhon or Ġgiven Ġratio . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠThis Ġis Ġdone Ġto Ġput Ġthe Ġprogress Ġlabel Ġover Ġthe Ġprogress Ġbar Ġright Ġaligned . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠCo erce Ġat Ġleast Ġto Ġmake Ġ" 0 " Ġvisible . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Progress Indicator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . fill Max Width ( ratio . coerce At Least (. 0 6 f )). height ( 2 4 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġcolor Tone 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġif Ġ( is Highlight ed ) ĠMaterial Theme . colors . primary Ġelse Ġcolor Tone 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . padding ( horizontal Ġ= Ġ 4 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolor Tone 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval Ġtoday : ĠDate ĊĠĠĠ Ġget () Ġ= Ġwith ( Calendar . getInstance ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġset ( Calendar . HOUR , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġset ( Calendar . MINUTE , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġset ( Calendar . SECOND , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġset ( Calendar . MILLI SECOND , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġset ( Calendar . AM _ PM , ĠCalendar . AM ) ĊĠĠĠĠĠĠĠ Ġtime ĊĠĠĠ Ġ} Ċ Ċ @ Experimental Time Ċ @ Composable Ċ fun ĠStats Panel ( stats : ĠWord le Stats , Ġlast Record : ĠWord le Record ?, Ġon Share : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . spaced By ( 8 . dp ), ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠStats Fig ures ( stats ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( last Record Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . height ( Intr insic Size . Min ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġa Ġgame Ġwas Ġalready Ġplayed Ġtoday , Ġdisplay Ġcount down Ġuntil Ġtomorrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Record . date Ġ>= Ġtoday ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNext Word le Count Down ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVertical Divider ( color Ġ= Ġcolor Tone 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġon Share ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Share ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . width ( 8 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( p ainter Resource ( App Icon . Share ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ