package Ġedu . stanford . t co gh lan . tip calculator Ċ Ċ import Ġandroid . animation . Argb Evaluator Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroid . widget . Switch Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġkotlin . math . round ToInt Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" MainActivity " Ċ private Ġconst Ġval ĠINITIAL _ TIP _ PERCENT Ġ= Ġ 1 5 Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġet Base Amount : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġseek Bar Tip : ĠSeek Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Tip Percent Label : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Tip Amount : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Total Amount : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Tip Description : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġswitch Round Tip : ĠSwitch ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġet Base Amount Ġ= ĠfindViewById < EditText >( R . id . et Base Amount ) ĊĠĠĠĠĠĠĠ Ġseek Bar Tip Ġ= ĠfindViewById < Seek Bar >( R . id . seek Bar Tip ) ĊĠĠĠĠĠĠĠ Ġtv Tip Percent Label Ġ= ĠfindViewById < TextView >( R . id . tv Tip Percent Label ) ĊĠĠĠĠĠĠĠ Ġtv Tip Amount Ġ= ĠfindViewById < TextView >( R . id . tv Tip Amount ) ĊĠĠĠĠĠĠĠ Ġtv Total Amount Ġ= ĠfindViewById < TextView >( R . id . tv Total Amount ) ĊĠĠĠĠĠĠĠ Ġtv Tip Description Ġ= ĠfindViewById < TextView >( R . id . tv Tip Description ) ĊĠĠĠĠĠĠĠ Ġswitch Round Tip Ġ= ĠfindViewById < Switch >( R . id . switch Round Tip ) ĊĊĠĠĠĠĠĠĠ Ġseek Bar Tip . progress Ġ= ĠINITIAL _ TIP _ PERCENT ĊĠĠĠĠĠĠĠ Ġtv Tip Percent Label . text Ġ= Ġ"$ INITIAL _ TIP _ PERCENT %" ĊĠĠĠĠĠĠĠ Ġupdate Tip Description ( INITIAL _ TIP _ PERCENT ) ĊĠĠĠĠĠĠĠ Ġseek Bar Tip . setOn Seek Bar ChangeListener ( object : ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Progress Changed Ġ$ progress ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tip Percent Label . text Ġ= Ġ"$ progress %" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Tip And Total () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Tip Description ( progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( p 0 : ĠSeek Bar ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( p 0 : ĠSeek Bar ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġet Base Amount . add TextChanged Listener ( object : ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( p 0 : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" after TextChanged Ġ$ p 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Tip And Total () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġswitch Round Tip . setOnClickListener ( object : ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( p 0 : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Tip And Total () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompute Tip And Total (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( et Base Amount . text . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tip Amount . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Total Amount . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġget Ġthe Ġvalue Ġof Ġthe Ġbase Ġand Ġtip Ġpercent ĊĠĠĠĠĠĠĠ Ġval Ġbase Amount Ġ= Ġet Base Amount . text . toString (). toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġtip Percent Ġ= Ġseek Bar Tip . progress ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġcompute Ġthe Ġtip Ġand Ġtotal Ġfor Ġwhen Ġswitch Round Tip Ġis Ġon Ġand Ġswitch Round Tip Ġis Ġoff ĊĠĠĠĠĠĠĠ Ġvar Ġtip Amount Ġ= Ġbase Amount Ġ* Ġtip Percent Ġ/ Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Amount Ġ= Ġbase Amount Ġ+ Ġtip Amount ĊĠĠĠĠĠĠĠ Ġif Ġ( switch Round Tip . isChecked ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtip Amount Ġ= Ġtip Amount . round ToInt (). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Amount Ġ= Ġbase Amount Ġ+ Ġtip Amount ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . ĠUpdate Ġthe ĠUI ĊĠĠĠĠĠĠĠ Ġtv Tip Amount . text Ġ= Ġ"% . 2 f ". format ( tip Amount ) ĊĠĠĠĠĠĠĠ Ġtv Total Amount . text Ġ= Ġ"% . 2 f ". format ( total Amount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Tip Description ( tip Percent : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġval Ġtip Description Ġ= Ġwhen Ġ( tip Percent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 .. 9 Ġ-> Ġ" Po or " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 0 .. 1 4 Ġ-> Ġ" Accept able " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 5 .. 1 9 Ġ-> Ġ" Good " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 2 0 .. 2 4 Ġ-> Ġ" Great " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" A mazing " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtv Tip Description . text Ġ= Ġtip Description ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠArg b Evaluator (). evaluate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtip Percent . toFloat () Ġ/ Ġseek Bar Tip . max , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( this , ĠR . color . wor st _ tip ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( this , ĠR . color . best _ tip ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠInt ĊĠĠĠĠĠĠĠ Ġtv Tip Description . setTextColor ( color ) ĊĠĠĠĠĠĠĠ Ġseek Bar Tip . set BackgroundColor ( color ) ĊĠĠĠ Ġ} Ċ }