package Ġde . r ki . cor on aw arn app . covid certificate . validation . ui . validation start Ċ Ċ import ĠTextView Url Set Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . format . DateFormat Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . google . android . material . datepicker . Calendar Constraints Ċ import Ġcom . google . android . material . datepicker . Date Validator Point Forward Ċ import Ġcom . google . android . material . datepicker . Material DatePicker Ċ import Ġcom . google . android . material . time picker . Material Time Picker Ċ import Ġcom . google . android . material . time picker . Time Format Ċ import Ġde . r ki . cor on aw arn app . R Ċ import Ġde . r ki . cor on aw arn app . bug reporting . ui . to Error Dialog Builder Ċ import Ġde . r ki . cor on aw arn app . covid certificate . validation . core . D cc Validation Ċ import Ġde . r ki . cor on aw arn app . covid certificate . validation . core . country . D cc Country Ċ import Ġde . r ki . cor on aw arn app . covid certificate . validation . ui . common . D cc Validation No Internet Error Dialog Ċ import Ġde . r ki . cor on aw arn app . databinding . Validation Start Fragment Binding Ċ import Ġde . r ki . cor on aw arn app . util . Context Extensions . getColor Compat Ċ import Ġde . r ki . cor on aw arn app . util . di . Auto Inject Ċ import Ġde . r ki . cor on aw arn app . util . ui . do Navigate Ċ import Ġde . r ki . cor on aw arn app . util . ui . pop Back Stack Ċ import Ġde . r ki . cor on aw arn app . util . ui . to Res olving String Ċ import Ġde . r ki . cor on aw arn app . util . ui . view Binding Ċ import Ġde . r ki . cor on aw arn app . util . view model . C WA ViewModel Factory Provider Ċ import Ġde . r ki . cor on aw arn app . util . view model . c wa ViewModels Ass isted Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . joda . time . LocalDate Ċ import Ġorg . joda . time . Local Time Ċ import Ġset Text With Urls Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠValidation Start Fragment Ġ: ĠFragment ( R . layout . validation _ start _ fragment ), ĠAuto Inject Ġ{ ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar ĠviewModel Factory : ĠC WA ViewModel Factory Provider . Factory ĊĠĠĠ Ġprivate Ġval Ġargs Ġby Ġnav Args < Validation Start Fragment Args >() ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġc wa ViewModels Ass isted < Validation Start ViewModel >( ĊĠĠĠĠĠĠĠ Ġfactory Producer Ġ= Ġ{ ĠviewModel Factory Ġ}, ĊĠĠĠĠĠĠĠ Ġconstructor Call Ġ= Ġ{ Ġfactory , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory Ġas ĠValidation Start ViewModel . Factory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory . create ( args . container Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġview Binding < Validation Start Fragment Binding >() ĊĠĠĠ Ġprivate Ġval Ġd cc Country Adapter Ġby Ġlazy Ġ{ ĠD cc Country Adapter ( require Context ()) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ= ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ Ġpop Back Stack () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Info Icon . setOnClickListener Ġ{ ĠviewModel . on Info Click () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivacy Information . setOnClickListener Ġ{ ĠviewModel . on Privacy Click () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Validation Check . default Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Validation Check . isLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Check Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Picker . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow DatePicker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Picker . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . country Changed ( dcc Country Adapter . getItem ( position )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Picker . setAdapter ( dcc Country Adapter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfa q . setText With Urls ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . validation _ start _ faq . to Res olving String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTextView Url Set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Resource Ġ= ĠR . string . validation _ start _ faq _ label , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Resource Ġ= ĠR . string . validation _ start _ faq _ link ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTextView Url Set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Resource Ġ= ĠR . string . validation _ start _ re open _ e urope _ label , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Resource Ġ= ĠR . string . validation _ start _ re open _ e urope _ link ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . observe ( view Lifecycle Owner ) Ġ{ Ġdate Picker . setText ( it . formatted DateTime ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . country List . observe ( view Lifecycle Owner ) Ġ{ Ġon Count ies Available ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . events . observe ( view Lifecycle Owner ) Ġ{ Ġon Nav Event ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠviewModel . refresh Time Check () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠValidation Start Fragment Binding . on Nav Event ( event : ĠStart Validation Nav Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigate To Validation Info Fragment Ġ-> Ġdo Navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidation Start Fragment Directions . action Validation Start Fragment To Validation Time Info Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigate To Privacy Fragment Ġ-> Ġdo Navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidation Start Fragment Directions . action Validation Start Fragment To Privacy Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠShow Time Message Ġ-> Ġshow Time Message ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNavigate To Validation Result Fragment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Validation Check . isLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Result Screen ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠShow Error Dialog Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Validation Check . isLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . error . to Error Dialog Builder ( require Context ()). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠShow No Internet Dialog Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Validation Check . isLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD cc Validation No Internet Error Dialog ( require Context ()). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠValidation Start Fragment Binding . show Time Message ( event : ĠShow Time Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . invalid Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Info . setText ( R . string . validation _ start _ time _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Info . setTextColor ( require Context (). getColor Compat ( R . color . color Text Semantic Red )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Layout . isError Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Layout . error Ġ= Ġ" Ġ" Ġ// ĠJust Ġto Ġhighlight Ġthe Ġfield Ġwith Ġred Ġcolour ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Info . setText ( R . string . validation _ start _ date _ info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Info . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). getColor Compat ( R . color . color On Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Layout . isError Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Result Screen ( event : ĠNavigate To Validation Result Fragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . validation Result . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD cc Validation . State . PAS SED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidation Start Fragment Directions . action Validation Start Fragment To D cc Validation Passed Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . validation Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠD cc Validation . State . OPEN Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidation Start Fragment Directions . action Validation Start Fragment To D cc Validation Open Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . validation Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . container Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠD cc Validation . State . TE CH N ICAL _ FAILURE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD cc Validation . State . FAILURE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidation Start Fragment Directions . action Validation Start Fragment To D cc Validation Failed Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . validation Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . container Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġdo Navigate ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠValidation Start Fragment Binding . on Count ies Available ( countries : ĠList < D cc Country >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdisplayName Ġ= Ġcountries . find Ġ{ Ġit . country Code Ġ== ĠviewModel . selected CountryCode Ġ} ?. displayName () ĊĠĠĠĠĠĠĠ Ġd cc Country Adapter . update ( countries ) ĊĠĠĠĠĠĠĠ Ġcountry Picker . setText ( displayName , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow DatePicker () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin Constraint : ĠDateTime Ġ= ĠDateTime . now (). minus Days ( 1 ) Ġ// ĠAllow Ġselection Ġfrom Ġtoday Ġon Ġonly ĊĠĠĠĠĠĠĠ Ġval Ġconstraints Ġ= ĠCalendar Constraints . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Validator ( Date Validator Point Forward . from ( min Constraint . with Second Of Minute ( 0 ). millis )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval ĠdateTime Ġ= ĠviewModel . selected Date . to DateTime ( viewModel . selected Time ) ĊĠĠĠĠĠĠĠ ĠMaterial DatePicker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. Builder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. date Picker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setSelection ( dateTime . millis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Calendar Constraints ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Time Picker ( LocalDate ( it ), ĠviewModel . selected Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( child FragmentManager , ĠDATE _ P ICK ER _ TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Time Picker ( date : ĠLocalDate , Ġtime : ĠLocal Time ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Format Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDate Format . is 2 4 Hour Format ( require Context ()) Ġ-> ĠTime Format . CLOCK _ 2 4 H ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTime Format . CLOCK _ 1 2 H ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMaterial Time Picker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTime Format ( time Format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Hour ( time . hour OfDay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Minute ( time . minute Of Hour ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . date Changed ( date , ĠLocal Time ( hour , Ġminute )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( child FragmentManager , ĠTIME _ P ICK ER _ TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDATE _ P ICK ER _ TAG Ġ= Ġ" date _ picker " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME _ P ICK ER _ TAG Ġ= Ġ" time _ picker " ĊĠĠĠ Ġ} Ċ } Ċ