package Ġcom . tw oplay tech . dr bet ting . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . tw oplay tech . dr bet ting . R Ċ import Ġcom . tw oplay tech . dr bet ting . data . models . Feedback Message Ċ import Ġcom . tw oplay tech . dr bet ting . data . models . Status Ċ import Ġcom . tw oplay tech . dr bet ting . databinding . Activity Feedback Binding Ċ import Ġcom . tw oplay tech . dr bet ting . ui . common . Base Activity Ċ import Ġcom . tw oplay tech . dr bet ting . ui . common . Text Watcher Ċ import Ġcom . tw oplay tech . dr bet ting . ui . view models . Feedback ViewModel Ċ import Ġcom . tw oplay tech . dr bet ting . util . isValid Email Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ @ Android EntryPoint Ċ class ĠFeedback Activity Ġ: ĠBase Activity (), ĠView . OnClickListener Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Feedback Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtoolbar : ĠToolbar ĊĠĠĠ Ġprivate Ġval Ġfeedback ViewModel : ĠFeedback ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġvar Ġemail : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġname : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġmessage : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Feedback Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġinit UI () ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġobserve Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġfeedback ViewModel . observe Feedback (). observe ( this , ĠObserver Ġ{ Ġresource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( resource . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . loading View . show ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġresource . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . loading View . show ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġresource . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackground s Ġ= Ġcom . tw oplay tech . dr bet ting . util . getRandom Background () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . loading View . setText ( resource . message Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . loading View . setBackground ( background Resource Ġ= Ġbackground s . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . loading View . show ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠ Ġobserve App Theme () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Focus () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . email , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . message ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfields . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġinit UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . content . loading View . show ( false ) ĊĠĠĠĠĠĠĠ Ġtoolbar Ġ= Ġbinding . toolbar ĊĠĠĠĠĠĠĠ Ġchange Theme ( toolbar Ġ= Ġtoolbar , Ġview Ġ= Ġbinding . content . background ) ĊĠĠĠĠĠĠĠ Ġbinding . content . submit . setBackground Resource ( com . tw oplay tech . dr bet ting . util . getRandom Background (). first ) ĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation Icon ( R . drawable . ic _ baseline _ arrow _ back _ 2 4 ) ĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . content . email . add TextChanged Listener ( Text Watcher ( callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ViewModel . set Email Error ( it . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġbinding . content . name . add TextChanged Listener ( Text Watcher ( callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ViewModel . setName Error ( it . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġbinding . content . message . add TextChanged Listener ( Text Watcher ( callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ViewModel . setMessage Error ( it . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġbinding . content . submit . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġset Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Errors () Ġ{ ĊĠĠĠĠĠĠĠ Ġfeedback ViewModel . set Email Error ( email . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġif Ġ(! email . isValid Email ()) Ġfeedback ViewModel . set Email Error ( true ) ĊĠĠĠĠĠĠĠ Ġfeedback ViewModel . setName Error ( name . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġfeedback ViewModel . setMessage Error ( message . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v ?. id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . submit Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feedback ViewModel . name Error ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . name . error Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . blank _ name _ err ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feedback ViewModel . email Error ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . email . error Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . blank _ email _ err ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feedback ViewModel . message Error ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . message . error Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . blank _ msg _ err ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! email . isValid Email ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . content . email . error Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . invalid _ email _ err ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠFeedback Message ( name Ġ= Ġname , Ġemail Ġ= Ġemail , Ġmessage Ġ= Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ViewModel . send Feedback ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }