package Ġcom . example . calculator Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . dynamic animation . animation . Dynamic Animation Ċ import Ġandroidx . dynamic animation . animation . Spring Animation Ċ import Ġandroidx . dynamic animation . animation . Spring Force Ċ import Ġcom . example . calculator . databinding . Activity Main Binding Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġnet . object h unter . exp 4 j . Expression Builder Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠY ah ya ĠFor oud Ġon ĠMar Ġ 0 5 Ġ 2 0 2 2 Ċ Ġ*/ Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġbinding . root ĊĠĠĠĠĠĠĠ ĠsetContentView ( view ) ĊĠĠĠĠĠĠĠ Ġ// set Ġtoolbar ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= Ġbinding . toolbar Main ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġchange Theme () ĊĊĠĠĠĠĠĠĠ Ġon Number Clicked () ĊĊĠĠĠĠĠĠĠ Ġon Operator Clicked () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// spring Ġanimation ĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġprivate Ġfun ĠView . implement Spring Animation Trait () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscale X Anim Ġ= ĠSpring Animation ( this , ĠDynamic Animation . SCALE _ X , Ġ 0 . 9 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġscale Y Anim Ġ= ĠSpring Animation ( this , ĠDynamic Animation . SCALE _ Y , Ġ 0 . 9 0 f ) ĊĊĠĠĠĠĠĠĠ Ġset On Touch Listener Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Anim . spring . st iff ness Ġ= ĠSpring Force . ST IFF NESS _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Anim . spring . d amping Ratio Ġ= ĠSpring Force . DA MP ING _ RATIO _ LOW _ BOUN CY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Anim . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Anim . spring . st iff ness Ġ= ĠSpring Force . ST IFF NESS _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Anim . spring . d amping Ratio Ġ= ĠSpring Force . DA MP ING _ RATIO _ LOW _ BOUN CY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Anim . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Anim . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Anim . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreverse Scale X Anim Ġ= ĠSpring Animation ( this , ĠDynamic Animation . SCALE _ X , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Scale X Anim . spring . st iff ness Ġ= ĠSpring Force . ST IFF NESS _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Scale X Anim . spring . d amping Ratio Ġ= ĠSpring Force . DA MP ING _ RATIO _ LOW _ BOUN CY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Scale X Anim . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreverse Scale Y Anim Ġ= ĠSpring Animation ( this , ĠDynamic Animation . SCALE _ Y , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Scale Y Anim . spring . st iff ness Ġ= ĠSpring Force . ST IFF NESS _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Scale Y Anim . spring . d amping Ratio Ġ= ĠSpring Force . DA MP ING _ RATIO _ LOW _ BOUN CY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Scale Y Anim . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// change Ġtheme ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġchange Theme () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . switch Main . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ YES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . switch Main . tooltip Text Ġ= Ġ" Day Ġmode " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ NO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . switch Main . tooltip Text Ġ= Ġ" Night Ġmode " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Number Clicked () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding . zero Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . expression Main Tv . text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . one Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . two Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . tree Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . four Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . five Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . six Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 6 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . se ven Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 7 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . eight Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . n ine Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 9 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . dot Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . expression Main Tv . text . isEmpty () Ġ|| Ġbinding . answer Main Tv . text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" 0 .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! binding . expression Main Tv . text . contains (". ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (".") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġprivate Ġfun Ġon Operator Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . expression Main Tv . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . answer Main Tv . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . br aces Left Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" (" ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . br aces Right Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text (" )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . division Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . expression Main Tv . text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Char Ġ= Ġbinding . expression Main Tv . text . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Char Ġ!= Ġ'+' Ġ&& Ġmy Char Ġ!= Ġ'-' Ġ&& Ġmy Char Ġ!= Ġ'*' Ġ&& Ġmy Char Ġ!= Ġ'/') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . total Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . expression Main Tv . text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Char Ġ= Ġbinding . expression Main Tv . text . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Char Ġ!= Ġ'+' Ġ&& Ġmy Char Ġ!= Ġ'-' Ġ&& Ġmy Char Ġ!= Ġ'*' Ġ&& Ġmy Char Ġ!= Ġ'/') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text ("+ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . minus Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . expression Main Tv . text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Char Ġ= Ġbinding . expression Main Tv . text . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Char Ġ!= Ġ'+' Ġ&& Ġmy Char Ġ!= Ġ'-' Ġ&& Ġmy Char Ġ!= Ġ'*' Ġ&& Ġmy Char Ġ!= Ġ'/') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . multip lication Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . expression Main Tv . text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Char Ġ= Ġbinding . expression Main Tv . text . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Char Ġ!= Ġ'+' Ġ&& Ġmy Char Ġ!= Ġ'-' Ġ&& Ġmy Char Ġ!= Ġ'*' Ġ&& Ġmy Char Ġ!= Ġ'/') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text ("* ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . clear Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Text Ġ= Ġbinding . expression Main Tv . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . expression Main Tv . text Ġ= Ġold Text . substring ( 0 , Ġold Text . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . equal Main Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . equal Main Btn . implement Spring Animation Trait () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . expression Main Tv . text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpression Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExpression Builder ( binding . expression Main Tv . text . toString ()). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġexpression . evaluate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlong Result Ġ= Ġresult . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 3 5 . 0 Ġ== Ġ 1 3 5 Ġ: Ġconvert Ġfloat Ġto Ġinteger ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġlong Result . toDouble ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . answer Main Tv . text Ġ= Ġlong Result . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . answer Main Tv . text Ġ= Ġresult . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . expression Main Tv . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . answer Main Tv . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( it , Ġ" What Ġyou Ġdid Ġis Ġwrong ", ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Try Ġagain ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ac Main Btn . text Ġ= Ġ" Ac " ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġappend Text ( new Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding . answer Main Tv . text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . expression Main Tv . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . answer Main Tv . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġbinding . expression Main Tv . append ( new Text ) ĊĊĠĠĠĠĠĠĠ Ġval Ġview Tree : ĠView Tree Observer Ġ= Ġbinding . horizontal ScrollView Expression Tv . view Tree Observer ĊĠĠĠĠĠĠĠ Ġview Tree . add On Global Layout Listener ( object Ġ: ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . horizontal ScrollView Expression Tv . view Tree Observer . remove On Global Layout Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . horizontal ScrollView Expression Tv . scrollTo ( binding . expression Main Tv . width , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ Ċ }