/* Ċ Ġ* Ġ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 Ġdev . ish ub h ams ing h . jet timer . ui . components Ċ Ċ import Ġandroidx . compose . animation . Animated Visibility Ċ import Ġandroidx . compose . animation . Cross fade Ċ import Ġandroidx . compose . animation . Experimental Animation Api Ċ import Ġandroidx . compose . animation . animate Color As State Ċ import Ġandroidx . compose . animation . core . Linear E asing Ċ import Ġandroidx . compose . animation . core . Repeat Mode Ċ import Ġandroidx . compose . animation . core . animate Float Ċ import Ġandroidx . compose . animation . core . infinite Repeat able Ċ import Ġandroidx . compose . animation . core . remember Infinite Transition Ċ import Ġandroidx . compose . animation . core . t ween Ċ import Ġandroidx . compose . animation . fadeIn Ċ import Ġandroidx . compose . animation . fadeOut Ċ import Ġandroidx . compose . animation . slide In H orizontally Ċ import Ġandroidx . compose . animation . slide Out H orizontally Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ 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 . size Ċ import Ġandroidx . compose . foundation . shape . Circle Shape Ċ import Ġandroidx . compose . material . Divider Ċ import Ġandroidx . compose . material . Floating ActionButton Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Play Arrow Ċ import Ġandroidx . compose . material . icons . filled . Refresh Ċ import Ġandroidx . compose . material . icons . filled . Stop Ċ import Ġandroidx . compose . material . icons . outlined . Back space Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip Ċ import Ġandroidx . compose . ui . res . color Resource Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġandroidx . lifecycle . view model . compose . viewModel Ċ import Ġdev . ish ub h ams ing h . jet timer . R Ċ import Ġdev . ish ub h ams ing h . jet timer . ui . theme . F ira Sans Ċ import Ġdev . ish ub h ams ing h . jet timer . ui . theme . purple 5 0 0 Ċ import Ġdev . ish ub h ams ing h . jet timer . ui . view model . Timer ViewModel Ċ Ċ @ Composable Ċ fun ĠTimer Display ( timer ViewModel : ĠTimer ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval Ġhour : ĠString Ġby Ġtimer ViewModel . hour Value . observe As State ( initial Ġ= Ġ" 0 0 ") ĊĠĠĠ Ġval Ġminute : ĠString Ġby Ġtimer ViewModel . min Value . observe As State ( initial Ġ= Ġ" 0 0 ") ĊĠĠĠ Ġval Ġsecond : ĠString Ġby Ġtimer ViewModel . sec Value . observe As State ( initial Ġ= Ġ" 0 0 ") ĊĠĠĠ Ġval ĠisValid : ĠBoolean Ġby Ġtimer ViewModel . isValid Input . observe As State ( false ) ĊĊĠĠĠ Ġval ĠtextColor Ġby Ġanimate Color As State ( if Ġ( isValid ) Ġpur ple 5 0 0 Ġelse ĠMaterial Theme . colors . on Background ) ĊĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Even ly , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= ĠMaterial Theme . colors . background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġhour , Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Hours ", Ġstyle Ġ= ĠMaterial Theme . typography . caption . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 1 6 . sp , ĠfontWeight Ġ= ĠFontWeight . Sem iB old , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" :", Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġminute , Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Minutes ", Ġstyle Ġ= ĠMaterial Theme . typography . caption . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 1 6 . sp , ĠfontWeight Ġ= ĠFontWeight . Sem iB old , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" :", Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġsecond , Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Seconds ", Ġstyle Ġ= ĠMaterial Theme . typography . caption . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 1 6 . sp , ĠfontWeight Ġ= ĠFontWeight . Sem iB old , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠNum Pad ( timer ViewModel : ĠTimer ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval ĠisValid Input : ĠBoolean Ġby Ġtimer ViewModel . isValid Input . observe As State ( initial Ġ= Ġfalse ) ĊĠĠĠ Ġval Ġbg Color Ġby Ġanimate Color As State ( color Resource ( id Ġ= ĠR . color . grey Background )) ĊĠĠĠ Ġval ĠtextColor Ġby Ġanimate Color As State ( Material Theme . colors . on Background ) ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ), ĊĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Top , ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Even ly ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( vertical Arrange ment Ġ= ĠArrange ment . spaced By ( 1 6 . dp ), ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 1 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 4 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 7 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 7 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠColumn ( vertical Arrange ment Ġ= ĠArrange ment . spaced By ( 1 6 . dp ), ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 2 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 5 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 8 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠColumn ( vertical Arrange ment Ġ= ĠArrange ment . spaced By ( 1 6 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 3 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 6 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . set Timer Value ( 9 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" 9 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 . copy ( fontFamily Ġ= ĠF ira Sans ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), Ġcolor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnimated Visibility ( visible Ġ= ĠisValid Input , Ġenter Ġ= Ġslide In H orizontally (), Ġexit Ġ= Ġslide Out H orizontally ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Circle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= Ġbg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 7 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ Ġtimer ViewModel . delete Timer Value () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= ĠIcons . Outlined . Back space , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" clear ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠTimer Button ( timer ViewModel : ĠTimer ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval ĠisValid Input : ĠBoolean Ġby Ġtimer ViewModel . isValid Input . observe As State ( initial Ġ= Ġfalse ) ĊĠĠĠ ĠAnimated Visibility ( visible Ġ= ĠisValid Input , Ġenter Ġ= ĠfadeIn (), Ġexit Ġ= Ġfade Out ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠFloating ActionButton ( onClick Ġ= Ġ{ Ġtimer ViewModel . start Timer () Ġ}, Ġmodifier Ġ= ĠModifier . padding ( 4 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= ĠIcons . Default . Play Arrow , Ġcontent Description Ġ= Ġ" play ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠTimer Input Screen () Ġ{ ĊĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTimer Display () ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 3 0 . dp )) ĊĠĠĠĠĠĠĠ ĠDiv ider () ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 5 0 . dp )) ĊĠĠĠĠĠĠĠ ĠNum Pad () ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 2 5 . dp )) ĊĠĠĠĠĠĠĠ ĠTimer Button () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠTimer Progress ( timer ViewModel : ĠTimer ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval Ġhour : ĠString Ġby Ġtimer ViewModel . timer Hour . observe As State ( initial Ġ= Ġ" 0 0 ") ĊĠĠĠ Ġval Ġminute : ĠString Ġby Ġtimer ViewModel . timer Min . observe As State ( initial Ġ= Ġ" 0 0 ") ĊĠĠĠ Ġval Ġsecond : ĠString Ġby Ġtimer ViewModel . timer Sec . observe As State ( initial Ġ= Ġ" 0 0 ") ĊĠĠĠ Ġval ĠisValid : ĠBoolean Ġby Ġtimer ViewModel . isValid Input . observe As State ( false ) ĊĊĠĠĠ Ġval ĠtextColor Ġby Ġanimate Color As State ( if Ġ( isValid ) Ġpur ple 5 0 0 Ġelse ĠMaterial Theme . colors . on Background ) ĊĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Even ly , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= ĠMaterial Theme . colors . background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġhour , Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Hours ", Ġstyle Ġ= ĠMaterial Theme . typography . caption . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 1 6 . sp , ĠfontWeight Ġ= ĠFontWeight . Sem iB old , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" :", Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġminute , Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Minutes ", Ġstyle Ġ= ĠMaterial Theme . typography . caption . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 1 6 . sp , ĠfontWeight Ġ= ĠFontWeight . Sem iB old , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" :", Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġsecond , Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Seconds ", Ġstyle Ġ= ĠMaterial Theme . typography . caption . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 1 6 . sp , ĠfontWeight Ġ= ĠFontWeight . Sem iB old , Ġcolor Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠTimer Running Actions ( timer ViewModel : ĠTimer ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval ĠisValid Input : ĠBoolean Ġby Ġtimer ViewModel . isValid Input . observe As State ( initial Ġ= Ġfalse ) ĊĠĠĠ ĠAnimated Visibility ( visible Ġ= ĠisValid Input , Ġenter Ġ= ĠfadeIn (), Ġexit Ġ= Ġfade Out ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠFloating ActionButton ( onClick Ġ= Ġ{ Ġtimer ViewModel . stop Timer () Ġ}, Ġmodifier Ġ= ĠModifier . padding ( 4 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= ĠIcons . Default . Stop , Ġcontent Description Ġ= Ġ" stop ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠTimer Running Screen ( timer ViewModel : ĠTimer ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval Ġis Timer Finished : ĠBoolean Ġby Ġtimer ViewModel . is Timer Finished . observe As State ( initial Ġ= Ġfalse ) ĊĠĠĠ ĠCross fade ( target State Ġ= Ġis Timer Finished ) Ġ{ Ġtimer Finish Status Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( timer Finish Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠTimer Finish Screen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 3 0 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 5 0 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Running Actions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠTimer Screen ( timer ViewModel : ĠTimer ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval Ġis Timer Running : ĠBoolean Ġby Ġtimer ViewModel . is Timer Running . observe As State ( initial Ġ= Ġfalse ) ĊĠĠĠ ĠCross fade ( target State Ġ= Ġis Timer Running ) Ġ{ Ġtimer Running Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( timer Running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠTimer Running Screen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> ĠTimer Input Screen () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠFinish TextArea ( timer ViewModel : ĠTimer ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval Ġinfinite Transition Ġ= Ġremember Infinite Transition () ĊĠĠĠ Ġval Ġtext Opacity Ġby Ġinfinite Transition . animate Float ( ĊĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġtarget Value Ġ= Ġ 1 f , ĊĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġinfinite Repeat able ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Ġ= Ġt ween ( delay Millis Ġ= Ġ 2 0 0 , Ġeasing Ġ= ĠLinear E asing ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= ĠRepeat Mode . Reverse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġtimer Value : ĠString Ġby Ġtimer ViewModel . timer Value . observe As State ( initial Ġ= Ġ" 0 0 Ġ: Ġ 0 0 Ġ: Ġ 0 0 ") ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= ĠMaterial Theme . colors . background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ), ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Finished ", Ġstyle Ġ= ĠMaterial Theme . typography . h 4 . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 6 4 . sp , ĠfontWeight Ġ= ĠFontWeight . Medium , Ġcolor Ġ= Ġpur ple 5 0 0 . copy ( alpha Ġ= Ġtext Opacity ))) ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġtimer Value , Ġstyle Ġ= ĠMaterial Theme . typography . caption . copy ( fontFamily Ġ= ĠF ira Sans , ĠfontSize Ġ= Ġ 1 8 . sp , ĠfontWeight Ġ= ĠFontWeight . Sem iB old , Ġcolor Ġ= ĠMaterial Theme . colors . on Background , Ġletter Spacing Ġ= Ġ 4 . sp )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠTimer Finish Action ( timer ViewModel : ĠTimer ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval Ġis Timer Finished : ĠBoolean Ġby Ġtimer ViewModel . is Timer Finished . observe As State ( initial Ġ= Ġfalse ) ĊĠĠĠ ĠAnimated Visibility ( visible Ġ= Ġis Timer Finished , Ġenter Ġ= ĠfadeIn (), Ġexit Ġ= Ġfade Out ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠFloating ActionButton ( onClick Ġ= Ġ{ Ġtimer ViewModel . reset Timer Values () Ġ}, Ġmodifier Ġ= ĠModifier . padding ( 4 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= ĠIcons . Default . Refresh , Ġcontent Description Ġ= Ġ" refresh ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠTimer Finish Screen () Ġ{ ĊĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFinish TextArea () ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 3 0 . dp )) ĊĠĠĠĠĠĠĠ ĠDiv ider () ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 5 0 . dp )) ĊĠĠĠĠĠĠĠ ĠTimer Finish Action () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Preview Ċ @ Composable Ċ fun ĠTimer Input Screen Preview () Ġ{ ĊĠĠĠ ĠTimer Screen () Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Preview Ċ @ Composable Ċ fun ĠTimer Progress Preview () Ġ{ ĊĠĠĠ ĠTimer Running Screen () Ċ } Ċ Ċ @ Experimental Animation Api Ċ @ Preview Ċ @ Composable Ċ fun ĠTimer N ump ad Preview () Ġ{ ĊĠĠĠ ĠNum Pad () Ċ } Ċ