1+ package com .example .calc ;
2+
3+ import androidx .appcompat .app .AppCompatActivity ;
4+
5+ import android .os .Bundle ;
6+ import android .view .View ;
7+ import android .widget .TextView ;
8+ import com .google .android .material .button .MaterialButton ;
9+
10+ import org .mozilla .javascript .Context ;
11+ import org .mozilla .javascript .ScriptableObject ;
12+
13+ public class MainActivity extends AppCompatActivity implements View .OnClickListener {
14+
15+ TextView resultsTv , solutionTv ;
16+
17+ MaterialButton btnAc , btnMult , btnDiv , btnBack , btn7 , btn8 , btn9 , btnPlus , btn4 , btn5 , btn6 , btnSub , btn1 , btn2 , btn3 , btnPer , btnPt , btn0 , btn00 , btnSol ;
18+
19+ @ Override
20+ protected void onCreate (Bundle savedInstanceState ) {
21+ super .onCreate (savedInstanceState );
22+ setContentView (R .layout .activity_main );
23+
24+ resultsTv = findViewById (R .id .result_tv );
25+ solutionTv = findViewById (R .id .sol_tv );
26+
27+ assignId (btnAc , R .id .btnAC );
28+ assignId (btnMult , R .id .btnMult );
29+ assignId (btnDiv , R .id .btnDiv );
30+ assignId (btnBack , R .id .btnBack );
31+ assignId (btn7 , R .id .btn7 );
32+ assignId (btn8 , R .id .btn8 );
33+ assignId (btn9 , R .id .btn9 );
34+ assignId (btnPlus , R .id .btnPlus );
35+ assignId (btn4 , R .id .btn4 );
36+ assignId (btn5 , R .id .btn5 );
37+ assignId (btn6 , R .id .btn6 );
38+ assignId (btnSub , R .id .btnSub );
39+ assignId (btn1 , R .id .btn1 );
40+ assignId (btn2 , R .id .btn2 );
41+ assignId (btn3 , R .id .btn3 );
42+ assignId (btnPer , R .id .btnPer );
43+ assignId (btnPt , R .id .btnPt );
44+ assignId (btn0 , R .id .btn0 );
45+ assignId (btn00 , R .id .btn00 );
46+ assignId (btnSol , R .id .btnSol );
47+ }
48+
49+ void assignId (MaterialButton btn , int id ){
50+ btn = findViewById (id );
51+ btn .setOnClickListener (this );
52+ }
53+
54+ @ Override
55+ public void onClick (View view ) {
56+ MaterialButton button = (MaterialButton ) view ;
57+ String buttonText = button .getText ().toString ();
58+ String datatoCalculate = solutionTv .getText ().toString ();
59+
60+ if (buttonText .equals ("AC" )){
61+ solutionTv .setText ("" );
62+ resultsTv .setText ("0" );
63+ return ;
64+ }
65+ if (buttonText .equals ("=" )){
66+ solutionTv .setText (resultsTv .getText ());
67+ return ;
68+ }
69+ if (buttonText .equals ("C" )){
70+ if (datatoCalculate .length () != 0 ) {
71+ datatoCalculate = datatoCalculate .substring (0 , datatoCalculate .length ()-1 );
72+ }
73+ }else {
74+ datatoCalculate = datatoCalculate + buttonText ;
75+ }
76+
77+ if (datatoCalculate .endsWith ("/" )) {
78+ datatoCalculate = datatoCalculate .replace ("*/" , "/" );
79+ datatoCalculate = datatoCalculate .replace ("+/" , "/" );
80+ datatoCalculate = datatoCalculate .replace ("-/" , "/" );
81+ datatoCalculate = datatoCalculate .replace ("%/" , "/" );
82+ } else if (datatoCalculate .endsWith ("*" )) {
83+ datatoCalculate = datatoCalculate .replace ("/*" , "*" );
84+ datatoCalculate = datatoCalculate .replace ("+*" , "*" );
85+ datatoCalculate = datatoCalculate .replace ("-*" , "*" );
86+ datatoCalculate = datatoCalculate .replace ("%*" , "*" );
87+ } else if (datatoCalculate .endsWith ("%" )) {
88+ datatoCalculate = datatoCalculate .replace ("*%" , "%" );
89+ datatoCalculate = datatoCalculate .replace ("+%" , "%" );
90+ datatoCalculate = datatoCalculate .replace ("-%" , "%" );
91+ datatoCalculate = datatoCalculate .replace ("/%" , "%" );
92+ } else if (datatoCalculate .endsWith ("+" )) {
93+ datatoCalculate = datatoCalculate .replace ("*+" , "+" );
94+ datatoCalculate = datatoCalculate .replace ("/+" , "+" );
95+ datatoCalculate = datatoCalculate .replace ("-+" , "+" );
96+ datatoCalculate = datatoCalculate .replace ("%+" , "+" );
97+ } else if (datatoCalculate .endsWith ("-" )) {
98+ datatoCalculate = datatoCalculate .replace ("*-" , "-" );
99+ datatoCalculate = datatoCalculate .replace ("+-" , "-" );
100+ datatoCalculate = datatoCalculate .replace ("/-" , "-" );
101+ datatoCalculate = datatoCalculate .replace ("%-" , "-" );
102+ }
103+ solutionTv .setText (datatoCalculate );
104+
105+ String finalResult = getResult (datatoCalculate );
106+
107+ if (!finalResult .equals ("Err" )){
108+ resultsTv .setText (finalResult );
109+ }
110+ }
111+ String getResult (String data ) {
112+ try {
113+ Context context = Context .enter ();
114+ context .setOptimizationLevel (-1 );
115+ ScriptableObject scriptable = context .initSafeStandardObjects ();
116+ String finalResult = context .evaluateString (scriptable , data , "Javascript" , 1 , null ).toString ();
117+ if (finalResult .endsWith (".0" )){
118+ finalResult = finalResult .replace (".0" , "" );
119+ }
120+ return finalResult ;
121+ }catch (Exception e ){
122+ return "Err" ;
123+ }
124+ }
125+ }
0 commit comments