/* Ċ Ġ* Ġ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 . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . offset Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . required Size Ċ import Ġandroidx . compose . foundation . text . Keyboard Actions Ċ import Ġandroidx . compose . foundation . text . Keyboard Options Ċ import Ġandroidx . compose . material . Button Ċ import Ġandroidx . compose . material . Button Defaults Ċ import Ġandroidx . compose . material . Local TextStyle Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Surface Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . TextField Ċ import Ġandroidx . compose . material . TextField Defaults Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . Experimental Compose Ui Api Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . platform . Local Software Keyboard Controller Ċ import Ġandroidx . compose . ui . text . input . I me Action Ċ import Ġandroidx . compose . ui . text . input . Keyboard Type Ċ 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 Ċ Ċ @ Composable Ċ fun ĠTimer Screen ( timer ViewModel : ĠTimer ViewModel ) Ġ{ ĊĠĠĠ Ġvar Ġtimer Value Ġ= Ġtimer ViewModel . timer Value ĊĠĠĠ Ġvar Ġtimer Started Ġ= Ġtimer ViewModel . timer Started ĊĠĠĠ Ġvar Ġtimer Finished Ġ= Ġtimer ViewModel . timer Finished ĊĠĠĠ Ġval Ġupdate Timer Ġ= Ġtimer ViewModel :: update Timer ĊĠĠĠ Ġval Ġstart Timer Ġ= Ġtimer ViewModel :: start Timer ĊĠĠĠ Ġval Ġstop Timer Ġ= Ġtimer ViewModel :: stop Timer ĊĊĠĠĠ ĠSurface ( color Ġ= ĠMaterial Theme . colors . background ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Field ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Value Ġ= Ġtimer Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Finished Ġ= Ġtimer Finished ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Field With Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Value Ġ= Ġtimer Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Started Ġ= Ġtimer Started , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Timer Ġ= Ġupdate Timer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Finished Ġ= Ġtimer Finished , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon I me Action Ġ= Ġstart Timer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Buttons ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Timer Ġ= Ġstop Timer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Timer Ġ= Ġupdate Timer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Timer Ġ= Ġstart Timer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Started Ġ= Ġtimer Started , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! timer Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Value Ġ= Ġtimer Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Started Ġ= Ġtimer Started , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Timer Ġ= Ġupdate Timer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Timer Ġ= Ġstart Timer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTimer Buttons ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġstop Timer : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġupdate Timer : Ġ( value : ĠString ) Ġ-> ĠUnit , ĊĠĠĠ Ġstart Timer : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġtimer Started : ĠBoolean , Ċ ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( all Ġ= Ġ 6 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbutton Modifier Ġ= ĠModifier . required Size ( width Ġ= Ġ 1 2 8 . dp , Ġheight Ġ= Ġ 6 4 . dp ) ĊĠĠĠĠĠĠĠ Ġval Ġbutton FontSize Ġ= Ġ 2 4 . sp ĊĊĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġbutton Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors Ġ= ĠButton Defaults . button Colors ( backgroundColor Ġ= ĠColor . Gray ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( timer Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( timer Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Pause ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġbutton FontSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . White ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Resume ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġbutton FontSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . White ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġbutton Modifier . offset ( x Ġ= Ġ 1 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors Ġ= ĠButton Defaults . button Colors ( backgroundColor Ġ= ĠColor . White ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Timer ( 0 . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Clear ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġbutton FontSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Blue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTimer Input ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġtimer Value : ĠInt , ĊĠĠĠ Ġtimer Started : ĠBoolean , ĊĠĠĠ Ġupdate Timer : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġstart Timer : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠRow () Ġ{ ĊĠĠĠĠĠĠĠ ĠTimer Input Field ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . padding ( all Ġ= Ġ 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Value Ġ= Ġtimer Value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Started Ġ= Ġtimer Started , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Timer Ġ= Ġupdate Timer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon I me Action Ġ= Ġstart Timer ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Compose Ui Api :: class ) Ċ @ Composable Ċ fun ĠTimer Input Field ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġtimer Value : ĠInt , ĊĠĠĠ Ġtimer Started : ĠBoolean , ĊĠĠĠ Ġupdate Timer : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon I me Action : Ġ() Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĠĠĠ Ġval Ġkeyboard Controller Ġ= ĠLocal Software Keyboard Controller . current ĊĠĠĠ ĠTextField ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . padding ( 3 2 . dp ), ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġtimer Value . toString (), ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġupdate Timer , ĊĠĠĠĠĠĠĠ Ġcolors Ġ= ĠTextField Defaults . textField Colors ( backgroundColor Ġ= ĠColor . Transparent ), ĊĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText (" input Ġtime Ġhere !") Ġ}, ĊĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġenabled Ġ= Ġ! timer Started , ĊĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options . Default . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Action Ġ= ĠI me Action . Done , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Type Ġ= ĠKeyboard Type . Number ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġkeyboard Actions Ġ= ĠKeyboard Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Done Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon I me Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Controller ?. hide Software Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTimer Field ( modifier : ĠModifier Ġ= ĠModifier , Ġtimer Value : ĠInt , Ġtimer Finished : ĠBoolean ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= Ġ 1 5 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 2 8 . sp , ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġto Timer String ( timer Value ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġif Ġ( timer Finished ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 3 2 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" finished \ uD 8 3 D \ u DE 8 0 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġto Timer String ( value : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġmin Ġ= Ġvalue Ġ/ Ġ 1 0 0 ĊĠĠĠ Ġval Ġsec Ġ= Ġvalue Ġ% Ġ 1 0 0 ĊĠĠĠ Ġreturn Ġ"${ min . toString (). pad Start ( 2 , Ġ' 0 ') }:${ sec . toString (). pad Start ( 2 , Ġ' 0 ') }" Ċ } Ċ Ċ @ Opt In ( Experimental Compose Ui Api :: class ) Ċ @ Composable Ċ private Ġfun ĠTimer Field With Input ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġtimer Value : ĠInt , ĊĠĠĠ Ġtimer Started : ĠBoolean , ĊĠĠĠ Ġupdate Timer : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon I me Action : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġtimer Finished : ĠBoolean Ċ ) Ġ{ ĊĠĠĠ Ġval Ġkeyboard Controller Ġ= ĠLocal Software Keyboard Controller . current ĊĠĠĠ ĠTextField ( ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġto Timer String ( timer Value ), ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġupdate Timer , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= Ġ 1 5 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠĠĠĠĠ Ġenabled Ġ= Ġ! timer Started , ĊĠĠĠĠĠĠĠ Ġtext Style Ġ= ĠLocal TextStyle . current . copy ( textAlign Ġ= ĠText Align . Center , ĠfontSize Ġ= Ġ 1 2 8 . sp ), ĊĠĠĠĠĠĠĠ Ġcolors Ġ= ĠTextField Defaults . textField Colors ( backgroundColor Ġ= ĠColor . Transparent ), ĊĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options . Default . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Action Ġ= ĠI me Action . Done , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Type Ġ= ĠKeyboard Type . Number ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġkeyboard Actions Ġ= ĠKeyboard Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Done Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon I me Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Controller ?. hide Software Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ) ĊĠĠĠ Ġif Ġ( timer Finished ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 3 2 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" finished \ uD 8 3 D \ u DE 8 0 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ fun ĠDark Preview () Ġ{ ĊĠĠĠ ĠTimer Buttons ( ĊĠĠĠĠĠĠĠ Ġstop Timer Ġ= Ġ{ Ġ/* TODO */ Ġ}, ĊĠĠĠĠĠĠĠ Ġupdate Timer Ġ= Ġ{ Ġ/* TODO */ Ġ}, ĊĠĠĠĠĠĠĠ Ġtimer Started Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġstart Timer Ġ= Ġ{} ĊĠĠĠ Ġ) Ċ } Ċ