/* Ċ Ġ* Ġ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 . components Ċ Ċ /* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . Number Picker Ċ import Ġandroid . widget . Toast Ċ 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 . fill Max Height Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . material . Outlined Button Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . view interop . Android View Ċ import Ġcom . example . android dev challenge . R Ċ import Ġcom . example . android dev challenge . view models . Count Down Timer ViewModel Ċ Ċ @ Composable Ċ fun ĠTime Picker View ( viewModel : ĠCount Down Timer ViewModel ) Ġ{ ĊĠĠĠ ĠBox ( Modifier . fill Max Width (). fill Max Height ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( Modifier . align ( Alignment . Center )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠNumber Picker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . align ( Alignment . Center H orizontally ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Context . current , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Hour Select Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . hour Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Min Select Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . min Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Sec Select Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . sec Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġstring Resource ( R . string . select _ time ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOut lined Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . getTotal Time () Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update State To Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġstr , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Center H orizontally ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Start ĠTimer ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠNumber Picker ( ĊĠĠĠ Ġmodifier : ĠModifier , ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġon Hour Select Listener : Ġ( value : ĠInt ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Min Select Listener : Ġ( value : ĠInt ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Sec Select Listener : Ġ( value : ĠInt ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . then ( modifier ), ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Center ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" H rs ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( horizontal Ġ= Ġ 1 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . White . copy ( 0 . 4 f ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" M ins ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( horizontal Ġ= Ġ 1 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . White . copy ( 0 . 4 f ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Secs ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( horizontal Ġ= Ġ 1 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . White . copy ( 0 . 4 f ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠAndroid View ( ĊĠĠĠĠĠĠĠ Ġfactory Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlinear Layout Ġ= ĠLinearLayout ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Layout . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNumber Picker ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap Selector Wheel Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On ValueChanged Listener Ġ{ Ġ_, Ġ_, Ġi 2 Ġ-> Ġon Hour Select Listener ( i 2 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Layout . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNumber Picker ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġ 5 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap Selector Wheel Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On ValueChanged Listener Ġ{ Ġ_, Ġ_, Ġi 2 Ġ-> Ġon Min Select Listener ( i 2 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Layout . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNumber Picker ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġ 5 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap Selector Wheel Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On ValueChanged Listener Ġ{ Ġ_, Ġ_, Ġi 2 Ġ-> Ġon Sec Select Listener ( i 2 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Layout ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ