package Ġcom . co def or ces visual izer . contest . details Ċ Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . h ilt . navigation . compose . h ilt ViewModel Ċ import Ġcom . co def or ces visual izer . contest . R Ċ import Ġcom . co def or ces visual izer . contest . list . add Cal ender Event Ċ import Ġcom . co def or ces visual izer . core . Event Logger Ċ import Ġcom . co def or ces visual izer . core . components .* Ċ import Ġcom . co def or ces visual izer . core . utils . convert TimeStamp ToDate String Ċ import Ġcom . co def or ces visual izer . core . utils . convertTo DH MS Ċ import Ġcom . co def or ces visual izer . core . utils . convertTo H MS Ċ import Ġcom . co def or ces visual izer . domain . entity . Cont est Ċ import Ġcom . google . ac comp an ist . flow layout . Flow Row Ċ Ċ @ Composable Ċ fun ĠCont est Details Screen ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġcontest Id : ĠInt , ĊĠĠĠ Ġon Navigate Back : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Open Web Site : Ġ( Int ) Ġ-> ĠUnit , ĊĠĠĠ ĠviewModel : ĠCont est Details ViewModel Ġ= Ġh ilt ViewModel () Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġtitle Ġby Ġremember Ġ{ Ġmutable State Of (" Details ") Ġ} ĊĠĠĠ Ġval Ġui State Ġby ĠviewModel . ui State . collect As State () ĊĠĠĠ Ġval Ġremaining Time State Ġby ĠviewModel . remaining Time Flow . collect As State () ĊĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCF AppBar ( title Ġ= Ġtitle , Ġon Navigate Back Ġ= Ġon Navigate Back ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġfloating ActionButton Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ui State . contest ?. scheduled Ġ== Ġtrue ) ĠExtended Floating ActionButton ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĠText ( string Resource ( R . string . register )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Open Web Site ( contest Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Logger . log Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Ġ= Ġ" Register ĠFor ĠCont est ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam Ġ= Ġbundle Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cont est Id " Ġto Ġcontest Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ Ġinner Padding Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui State . loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCenter ( modifier Ġ= ĠModifier . padding ( inner Padding )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCF Loading Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui State . user Message . isNotBlank () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCenter ( modifier Ġ= ĠModifier . padding ( inner Padding )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġui State . user Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui State . contest Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontest Ġ= Ġui State . contest !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġcontest . name ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCont est Details Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( inner Padding ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontest Ġ= Ġcontest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Time Ġ= Ġremaining Time State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Open Web Site Ġ= Ġon Open Web Site ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠLa unched Effect ( contest Id ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . get Cont est ById ( contest Id ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠCont est Details Screen ( ĊĠĠĠ Ġmodifier : ĠModifier , ĊĠĠĠ Ġcontest : ĠCont est , ĊĠĠĠ Ġremaining Time : ĠLong , ĊĠĠĠ Ġon Open Web Site : Ġ( Int ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ(! contest . scheduled ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Open Web Site ( contest . id ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally , ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( R . string . before _ start )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġremaining Time . convertTo DH MS (), Ġstyle Ġ= ĠMaterial Theme . typography . h 6 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠHeight Spacer ( height Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFlow Row ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Axis Spacing Ġ= Ġ 4 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcross Axis Spacing Ġ= Ġ 4 . dp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ( label Ġ= Ġcontest . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ( label Ġ= Ġcontest . duration Seconds . convertTo H MS ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ( label Ġ= Ġcontest . startTime Seconds . convert TimeStamp ToDate String ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠHeight Spacer ( height Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Ġ= ĠRo unded Corner Shape ( percent Ġ= Ġ 5 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Cal ender Event ( context Ġ= Ġcontext , Ġcontest Ġ= Ġcontest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Logger . log Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Ġ= Ġ" Add Ġto ĠCal ender ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam Ġ= Ġbundle Of (" from " Ġto Ġ" Cont est ĠDetails ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( R . string . add _ to _ cal ender )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }