package Ġcom . work fort . pst ui an . app . ui . blood don ation request Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . InputType Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ 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 . work fort . pst ui an . R Ċ import Ġcom . work fort . pst ui an . app . ui . base . activity . Base Activity Ċ import Ġcom . work fort . pst ui an . app . ui . blood don ation request . intent . Blood Don ation Intent Ċ import Ġcom . work fort . pst ui an . app . ui . blood don ation request . view model . Blood Don ation ViewModel Ċ import Ġcom . work fort . pst ui an . app . ui . blood don ation request . view state . Blood Don ation Request State Ċ import Ġcom . work fort . pst ui an . databinding . Activity Create Blood Don ation Request Binding Ċ import Ġcom . work fort . pst ui an . util . helper . Date Util Ċ import Ġcom . work fort . pst ui an . util . view . dialog . Common Dialog Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ Ċ class ĠCreate Blood Don ation Request Activity Ġ: ĠBase Activity < Activity Create Blood Don ation Request Binding >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġbinding Inflater : Ġ( LayoutInflater ) Ġ-> ĠActivity Create Blood Don ation Request Binding ĊĠĠĠĠĠĠĠ Ġ= ĠActivity Create Blood Don ation Request Binding :: inflate ĊĊĠĠĠ Ġoverride Ġfun Ġget Toolbar Id (): ĠInt Ġ= ĠR . id . toolbar ĊĊĠĠĠ Ġprivate Ġval Ġm ViewModel : ĠB lood Don ation ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġoverride Ġfun Ġafter On Create ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Home Enabled () ĊĠĠĠĠĠĠĠ Ġset Ui Data () ĊĠĠĠĠĠĠĠ Ġobserve CreateRequest () ĊĠĠĠĠĠĠĠ Ġbinding . content . fab CreateRequest . setOnClickListener Ġ{ Ġcreate Request () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Ui Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding . content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġblood Ġgroup Ġdropdown ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġresources . getString Array ( R . array . blood _ group ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblood Group Adapter Ġ= ĠArray Adapter ( this @ Create Blood Don ation Request Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . row _ dropdown _ item , Ġgroups ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Blood . setAdapter ( blood Group Adapter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġdate Ġpicker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Date . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Type Ġ= ĠInput Type . TYPE _ NULL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Listener Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ Ġselect Date () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Focus ChangeListener Ġ{ Ġ_, Ġhas Focus Ġ-> Ġif Ġ( has Focus ) Ġ{ Ġselect Date () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Action Ui ( isLoading : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvisibility Ġ= Ġif ( isLoading ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloader Overlay . visibility Ġ= Ġvisibility ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloader . visibility Ġ= Ġvisibility ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Saving . visibility Ġ= Ġvisibility ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMakes Ġonly Ġdates Ġfrom Ġtoday Ġforward Ġselect able . ĊĠĠĠĠĠĠĠ Ġval Ġconstraints Builder Ġ= ĠCalendar Constraints . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Validator ( Date Validator Point Forward . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ ĠMaterial DatePicker . Builder . date Picker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setSelection ( Material DatePicker . today In Utc Milliseconds ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle Text (" Select Ġdate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Calendar Constraints ( constraints Builder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Str Ġ= ĠDate Util . format ( it , Ġ" yyyy - MM - dd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . et Date . setText ( date Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( support FragmentManager , Ġ" date - picker ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Request () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding . content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblood Ġ= Ġet Blood . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( TextUtils . isEmpty ( blood )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtil Blood . error Ġ= Ġ"* Required " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtil Blood . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Before Ġ= Ġet Date . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( TextUtils . isEmpty ( date Before )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtil Date . error Ġ= Ġ"* Required " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtil Date . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontact Ġ= Ġet Contact . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( TextUtils . isEmpty ( contact )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtil Contact . error Ġ= Ġ"* Required " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtil Contact . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġet Info . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . intent . send ( Blood Don ation Intent . Create Don ation Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblood , Ġdate Before , Ġcontact , Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve CreateRequest () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . create Don ation Request State . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠB lood Don ation Request State . Idle Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠB lood Don ation Request State . Loading Ġ-> Ġset Action Ui ( isLoading Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠB lood Don ation Request State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Action Ui ( isLoading Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Blood Ġdon ation Ġrequest Ġcreated Ġsuccessfully !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Dialog . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Create Blood Don ation Request Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel able Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġfinish () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠB lood Don ation Request State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Action Ui ( isLoading Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Dialog . error ( this @ Create Blood Don ation Request Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ