/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . example . android dev challenge Ċ Ċ import Ġandroidx . compose . animation . Experimental Animation Api Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . fill Max Height Ċ 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 . size Ċ import Ġandroidx . compose . foundation . layout . width Ċ import Ġandroidx . compose . foundation . shape . Circle Shape Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . material . Button Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . IconButton Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Surface Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Refresh Ċ import Ġandroidx . compose . material . icons . filled . Volume Off Ċ import Ġandroidx . compose . material . icons . filled . Volume Up Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Brush Ċ import Ġandroidx . compose . ui . platform . Local Density Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġcom . example . android dev challenge . ui . theme . almost White Ċ import Ġcom . example . android dev challenge . ui . theme . light Background Ċ import Ġcom . example . android dev challenge . ui . theme . orange Ċ import Ġcom . example . android dev challenge . ui . theme . red Ċ import Ġcom . example . android dev challenge . ui . theme . white With Opacity Ċ import Ġcom . example . android dev challenge . ui . theme . white With Opacity 2 Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠMy App ( viewModel : ĠMainActivity ViewModel ) Ġ{ ĊĊĠĠĠ Ġval Ġstate : ĠTimer State Ġby ĠviewModel . state . observe As State ( Timer State . Timer Done ) ĊĊĠĠĠ ĠSurface Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHeader () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġis ĠTimer State . Timer Setup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTime Selector ( state . remaining Time InSeconds ) Ġ{ ĠviewModel . setTime ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCount down Timer Text ( state . remaining Time InSeconds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠButtons Row ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġstate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Pause Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Timer Done Ġ-> ĠviewModel . reset Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimer State . Timer Running Ġ-> ĠviewModel . pause Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠviewModel . start Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . reset Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠCount down Timer Text ( time InSeconds : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġh Ġ= Ġ(( time InSeconds Ġ/ Ġ 6 0 Ġ/ Ġ 6 0 ) Ġ% Ġ 2 4 ). toString (). pad Start ( 2 , Ġ' 0 ') ĊĠĠĠ Ġval Ġm Ġ= Ġ(( time InSeconds Ġ/ Ġ 6 0 ) Ġ% Ġ 6 0 ). toString (). pad Start ( 2 , Ġ' 0 ') ĊĠĠĠ Ġval Ġs Ġ= Ġ( time InSeconds Ġ% Ġ 6 0 ). toString (). pad Start ( 2 , Ġ' 0 ') ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( BOX _ SIZE Ġ* Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCentral Line Box () ĊĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh , ĠfontSize Ġ= Ġ 4 8 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( BOX _ SIZE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" :", ĠfontSize Ġ= Ġ 4 8 . sp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm , ĠfontSize Ġ= Ġ 4 8 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( BOX _ SIZE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" :", ĠfontSize Ġ= Ġ 4 8 . sp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs , ĠfontSize Ġ= Ġ 4 8 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( BOX _ SIZE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠTime Selector ( ĊĠĠĠ Ġinitial Time InSeconds : ĠInt , ĊĠĠĠ Ġset Count Down : Ġ( Int ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġh Ġby Ġremember Ġ{ Ġmutable State Of ( 0 ) Ġ} ĊĠĠĠ Ġvar Ġm Ġby Ġremember Ġ{ Ġmutable State Of ( 0 ) Ġ} ĊĠĠĠ Ġvar Ġs Ġby Ġremember Ġ{ Ġmutable State Of ( 0 ) Ġ} ĊĊĠĠĠ Ġfun Ġupdate Count down () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( initial Time InSeconds Ġ!= Ġs Ġ+ Ġm Ġ* Ġ 6 0 Ġ+ Ġh Ġ* Ġ 6 0 Ġ* Ġ 6 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Count Down ( s Ġ+ Ġm Ġ* Ġ 6 0 Ġ+ Ġh Ġ* Ġ 6 0 Ġ* Ġ 6 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠBox Ġ{ ĊĠĠĠĠĠĠĠ ĠCentral Line Box () ĊĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTime Column ( 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Ġ= Ġit ; Ġupdate Count down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" :", ĠfontSize Ġ= Ġ 4 8 . sp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTime Column ( 6 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ= Ġit ; Ġupdate Count down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" :", ĠfontSize Ġ= Ġ 4 8 . sp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTime Column ( 6 0 ) Ġ{ Ġs Ġ= Ġit ; Ġupdate Count down () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠGradient Box () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠButtons Row ( state : ĠTimer State , Ġplay Pause : Ġ() Ġ-> ĠUnit , Ġstop : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= Ġ 3 2 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠReset Button ( stop ) ĊĠĠĠĠĠĠĠ ĠPlay Pause Button ( state , Ġplay Pause ) ĊĠĠĠĠĠĠĠ ĠSound Button () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠCentral Line Box () Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= ĠBO X _ SIZE Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( BOX _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( light Background ) ĊĠĠĠ Ġ) Ġ{} Ċ } Ċ Ċ @ Composable Ċ fun ĠGradient Box () Ġ{ ĊĠĠĠ Ġval Ġbox Pixel Size Ġ= Ġwith ( Local Density . current ) Ġ{ ĠBO X _ SIZE . to Px () Ġ} ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( BOX _ SIZE Ġ* Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBr ush . vertical Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Theme . colors . background . copy ( alpha Ġ= Ġ 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Theme . colors . background . copy ( alpha Ġ= Ġ 0 . 8 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Theme . colors . background , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbox Pixel Size Ġ* Ġ 2 . 2 5 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbox Pixel Size Ġ* Ġ 0 . 2 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBr ush . vertical Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Theme . colors . background . copy ( alpha Ġ= Ġ 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Theme . colors . background . copy ( alpha Ġ= Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Theme . colors . background , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbox Pixel Size Ġ* Ġ 2 . 7 5 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbox Pixel Size Ġ* Ġ 4 . 7 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{} Ċ } Ċ Ċ @ Composable Ċ fun ĠHeader () Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġ" TIMER ", ĊĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 8 . sp , ĊĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= Ġ 3 2 . dp , Ġbottom Ġ= Ġ 3 2 . dp ) ĊĠĠĠ Ġ) ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( bottom Ġ= Ġ 1 6 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" HOUR S ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . width ( BOX _ SIZE ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġwhite With Opacity 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( Modifier . width ( 1 2 . dp )) ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" MIN UTES ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . width ( BOX _ SIZE ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġwhite With Opacity 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( Modifier . width ( 1 2 . dp )) ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SECONDS ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . width ( BOX _ SIZE ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġwhite With Opacity 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġwhite With Opacity 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 1 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠ Ġ) Ġ{} Ċ } Ċ Ċ @ Composable Ċ fun ĠPlay Pause Button ( state : ĠTimer State , Ġplay Pause : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġplay Pause () Ġ}, ĊĠĠĠĠĠĠĠ Ġcontent Padding Ġ= ĠPadding Values (), ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠRo unded Corner Shape ( 3 2 . dp ), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 6 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( 2 0 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġ 3 2 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġif Ġ( state Ġ! is ĠTimer State . Timer Running ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Brush . horizontal Gradient ( listOf ( red , Ġorange ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Height () Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( almost White ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Height (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimer State . Timer Running Ġ-> Ġ" PAUSE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Timer Done Ġ-> Ġ" STOP " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimer State . Timer Paused Ġ-> Ġ" RE SU ME " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimer State . Timer Setup Ġ-> Ġ" START " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 2 0 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġif Ġ( state Ġ! is ĠTimer State . Timer Running ) Ġwhite With Opacity Ġelse Ġred ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠReset Button ( stop : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠIcon Button ( ĊĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġstop () Ġ}, ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 5 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( light Background , ĠCircle Shape ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Filled . Refresh , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= Ġwhite With Opacity 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠSound Button () Ġ{ ĊĠĠĠ Ġvar Ġis On Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ ĠIcon Button ( ĊĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġis On Ġ= Ġ! is On Ġ}, ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 5 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( light Background , ĠCircle Shape ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= Ġif Ġ( is On ) ĠIcons . Filled . Volume Off Ġelse ĠIcons . Filled . Volume Up , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= Ġwhite With Opacity 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ