/* Ċ Ġ* Ġ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 . ui . screen . top . component Ċ Ċ import Ġandroidx . compose . foundation . Canvas Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . aspect Ratio Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ 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 . draw . alpha Ċ import Ġandroidx . compose . ui . graphics . draw scope . Stroke Ċ 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 Ġcom . example . android dev challenge . ui . screen . top . Timer State Ċ import Ġcom . example . android dev challenge . ui . theme . My Theme Ċ import Ġjava . time . Duration Ċ Ċ @ Composable Ċ fun ĠTimer ( state : ĠTimer State ) Ġ{ ĊĠĠĠ ĠBox ( content Alignment Ġ= ĠAlignment . Center ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCount Down Circle ( progress Ġ= Ġstate . progress To Next Sec ) ĊĠĠĠĠĠĠĠ ĠCenter Display ( state Ġ= Ġstate ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠCount Down Circle ( progress : ĠFloat ) Ġ{ ĊĠĠĠ Ġval Ġcolors Ġ= ĠMaterial Theme . colors ĊĠĠĠ Ġval Ġstroke Ġ= ĠSt roke ( width Ġ= Ġ 1 2 f ) ĊĠĠĠ ĠCanvas ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. aspect Ratio ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 2 4 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdraw Arc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolors . secondary , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Angle Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsweep Angle Ġ= Ġ 3 6 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Center Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġstroke , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠR ough ly Ġadjustment Ġfor Ġgood Ġdesign ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ= Ġ( progress Ġ* Ġ 0 . 6 ). toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdraw Arc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolors . secondary Variant , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Angle Ġ= Ġ 2 7 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsweep Angle Ġ= Ġprogress Ġ* Ġ 3 6 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Center Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġstroke ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠCenter Display ( state : ĠTimer State ) Ġ{ ĊĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠTimer State . Reached Ġ-> ĠInfinity Scale InOut Text ( text Ġ= Ġ" B omb !! ðŁĴ £ ") ĊĠĠĠĠĠĠĠ Ġis ĠTimer State . Ready Ġ-> ĠReady () ĊĠĠĠĠĠĠĠ Ġis ĠTimer State . Pa using , ĊĠĠĠĠĠĠĠ Ġis ĠTimer State . Tick ing Ġ-> ĠTick ing ( state Ġ= Ġstate ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠReady () Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Ready ", ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 1 , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . primary , ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTick ing ( state : ĠTimer State ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ"${ state . next Sec }", ĊĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 8 0 . sp , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . primary , ĊĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( state . progress To Next Sec ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġstate . pre Sec ?. let Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ"$ it ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 8 0 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . primary , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 Ġ- Ġstate . progress To Next Sec ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( width Dp Ġ= Ġ 2 0 0 , Ġheight Dp Ġ= Ġ 8 0 0 , Ġfont Scale Ġ= Ġ 0 . 3 f ) Ċ @ Composable Ċ private Ġfun ĠLight Preview () Ġ{ ĊĠĠĠ ĠMy Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Ready , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Tick ing ( Duration . of Seconds ( 1 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Pa using ( Duration . of Seconds ( 3 ). minus Millis ( 3 0 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Reached , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). forEach Ġ{ ĠTimer ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( width Dp Ġ= Ġ 2 0 0 , Ġheight Dp Ġ= Ġ 8 0 0 , Ġfont Scale Ġ= Ġ 0 . 3 f ) Ċ @ Composable Ċ private Ġfun ĠDark Preview () Ġ{ ĊĠĠĠ ĠMy Theme ( dark Theme Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Ready , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Tick ing ( Duration . of Seconds ( 1 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Pa using ( Duration . of Seconds ( 3 ). minus Millis ( 3 0 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer State . Reached , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). forEach Ġ{ ĠTimer ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ