package Ġcom . example . calculator Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġnet . object h unter . exp 4 j . Expression Builder Ċ import Ġjava . lang . Exception Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġexpression Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġvar Ġresult Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġvar Ġcleared Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġvar Ġoper ated Ġ= Ġfalse ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġ" 0 " ĊĊĊĠĠĠĠĠĠĠ Ġbtn _ 0 . setOnClickListener Ġ{ Ġappend Text (" 0 ") Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ 1 . setOnClickListener Ġ{ Ġappend Text (" 1 ") Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ 2 . setOnClickListener Ġ{ Ġappend Text (" 2 ") Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ 3 . setOnClickListener Ġ{ Ġappend Text (" 3 ") Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ 4 . setOnClickListener Ġ{ Ġappend Text (" 4 ") Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ 5 . setOnClickListener Ġ{ Ġappend Text (" 5 ") Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ 6 . setOnClickListener Ġ{ Ġappend Text (" 6 ") Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ 7 . setOnClickListener Ġ{ Ġappend Text (" 7 ") Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ 8 . setOnClickListener Ġ{ Ġappend Text (" 8 ") Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ 9 . setOnClickListener Ġ{ Ġappend Text (" 9 ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġbtn _ dot _ sign . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expression [ expression . length Ġ- Ġ 1 ]. is Digit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ+= Ġ"." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . append (".") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoperation _ sign _ number . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġcalc _ operations . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number [ 0 ]. is Digit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġ"- $ number "; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġnumber . substring ( 1 , Ġnumber . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ+= Ġ" *- 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoperation _ pro cent . setOnClickListener Ġ{ Ġoperations Process ("% ") Ġ} ĊĠĠĠĠĠĠĠ Ġoperation _ addition . setOnClickListener Ġ{ Ġoperations Process ("+ ") Ġ} ĊĠĠĠĠĠĠĠ Ġoperation _ minus . setOnClickListener Ġ{ Ġoperations Process ("- ") Ġ} ĊĠĠĠĠĠĠĠ Ġoperation _ multiply . setOnClickListener Ġ{ Ġoperations Process ("* ") Ġ} ĊĠĠĠĠĠĠĠ Ġoperation _ division . setOnClickListener Ġ{ Ġoperations Process ("/") Ġ} ĊĊĠĠĠĠĠĠĠ Ġoperation _ all _ clear . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcleared Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġoperation _ equal . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpr _ builder Ġ= ĠExpression Builder ( expression ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġexpr _ builder . evaluate () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Ġ== Ġres . to Long (). toDouble ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġres . to Long (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġres . to Long (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġres . to Long (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġres . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġres . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġres . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w tf (" ERROR ", Ġ" Message : Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoperation _ del . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnm Ġ= Ġcalc _ operations . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( nm . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġnm . substring ( 0 , Ġnm . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġappend Text ( str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cleared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcleared Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( oper ated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ operations . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoper ated Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpression Ġ+= Ġstr ĊĠĠĠĠĠĠĠ Ġcalc _ operations . append ( str ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġoperations Process ( str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( expression [ expression . length Ġ- Ġ 1 ]. is Digit () Ġ&& Ġexpression . isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoper ated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ+= Ġstr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ