package Ġio . github . hor ac io come 1 . le ilo a . ui . company Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Input Filter Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġio . github . hor ac io come 1 . le ilo a . R Ċ import Ġio . github . hor ac io come 1 . le ilo a . databinding . Fragment Company Domain Binding Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ Ċ /** Ċ Ġ* Ġfragment Ġresponsible Ġfor Ġhandling Ġthe Ġinform ing Ġdomain Ġstep Ċ Ġ* Ġit Ġchecks Ġif Ġdomain Ġis Ġreal Ċ Ġ* Ġand Ġnavig ates Ġto Ġthe Ġnext Ġstep Ġif Ġit Ġis Ċ Ġ*/ Ċ class ĠCompany Domain Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Company Domain Binding ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠCompany Domain ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this )[ Company Domain ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Company Domain Binding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĠĠĠĠĠĠĠ Ġbinding . next Button . setOnClickListener ( this :: navigate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠviewModel . company Domain . observe ( this , ĠObserver Ġ{ Ġalert If Empty ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġupdate Max Text Length () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġalert If Empty ( company Domain : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . company Domain TextInput Layout . error Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( company Domain . isNotBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . cannot _ be _ blank ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . company Domain . value Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġview . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Successful Ġ= ĠviewModel . navigate To ProductId Async ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . company Domain TextInput Layout . error Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . domain _ is _ not _ real ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Max Text Length () Ġ= Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠmaxLength Ġ= ĠviewModel . retrieve Company Domain MaxLength Async () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĠĠĠĠĠĠĠ Ġbinding . company Domain TextInput Layout . counter MaxLength Ġ= ĠmaxLength ĊĠĠĠĠĠĠĠ Ġbinding . company Domain TextInput Layout . edit Text ?. filters Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInput Filter . Length Filter ( maxLength ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ