diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 38528ca..21b38f1 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 74b2d32..515bd87 100644 Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ diff --git a/.idea/modules.xml b/.idea/modules.xml index dcdca1a..15cde93 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 8352c69..5fed966 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,5 +20,6 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'net.objecthunter:exp4j:0.4.4' implementation 'com.android.support.constraint:constraint-layout:1.0.2' } diff --git a/app/src/main/java/pk/edu/pucit/calculator/MainActivity.java b/app/src/main/java/pk/edu/pucit/calculator/MainActivity.java index cbc2626..c7a8725 100644 --- a/app/src/main/java/pk/edu/pucit/calculator/MainActivity.java +++ b/app/src/main/java/pk/edu/pucit/calculator/MainActivity.java @@ -2,12 +2,258 @@ import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import net.objecthunter.exp4j.Expression; +import net.objecthunter.exp4j.ExpressionBuilder; + public class MainActivity extends AppCompatActivity { + + TextView res,eq; + Button one,two,three,four,five,six,seven,eight,nine,zero,doubleZero,ac,del,add,sub,mul,div,mod,fract,equal; + private final char ADDITION='+'; + private final char SUBTRACTION='-'; + private final char MULTIPLICATION='*'; + private final char FRACTION='.'; + private final char MODE='%'; + private final char DIVIDE='/'; + private double num1 = Double.NaN; + private double num2; + String s; + Expression expression; + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + setupVariables(); + + + //SETTING ONCLICK LISTENERS + one.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "1"); + } + }); + two.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "2"); + } + }); + three.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "3"); + } + }); + four.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "4"); + } + }); + five.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "5"); + } + }); + six.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "6"); + } + }); + seven.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "7"); + } + }); + eight.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "8"); + } + }); + nine.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "9"); + } + }); + zero.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "0"); + } + }); + doubleZero.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "00"); + } + }); + ac.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(""); + res.setText(""); + } + }); + del.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + + } + }); + add.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("+")) + { + eq.setText(eq.getText().toString()+ADDITION); + } + } + }); + sub.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("-")) + { + eq.setText(eq.getText().toString()+SUBTRACTION); + } + } + }); + mul.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("*")) + { + eq.setText(eq.getText().toString()+MULTIPLICATION); + } + } + }); + div.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("/")) + { + eq.setText(eq.getText().toString()+DIVIDE); + } + } + }); + fract.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String testStr = eq.getText().toString(); + int numOfDecimals = 0; + + for(int i = testStr.length()-1;i>=0;i--) + { + if(isOperator(testStr.charAt(i))) + { + i=0; + } + else if(testStr.charAt(i)=='.') + { + numOfDecimals++; + } + if(numOfDecimals>1) + i=0; + } + + + if(!eq.getText().toString().endsWith(".") && !eq.getText().toString().endsWith("+") && + !eq.getText().toString().endsWith("-") && !eq.getText().toString().endsWith("*") && + !eq.getText().toString().endsWith("/") && !eq.getText().toString().endsWith("%") && + numOfDecimals<1 ) + { + eq.setText(eq.getText().toString()+FRACTION); + } + } + }); + mod.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("%")) + { + eq.setText(eq.getText().toString()+MODE); + } + } + }); + equal.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String testStr = ""; + while(eq.getText().toString().endsWith("+") || eq.getText().toString().endsWith("-")|| eq.getText().toString().endsWith("*") || eq.getText().toString().endsWith("/") || eq.getText().toString().endsWith("%")) + { + testStr = eq.getText().toString(); + testStr = testStr.substring(0,testStr.length()-1); + eq.setText(testStr); + } + if(!eq.getText().toString().equals("")) + { + expression = new ExpressionBuilder(eq.getText().toString()).build(); + try { + // Calculate the result and display + double result = expression.evaluate(); + res.setText(Double.toString(result)); + } catch (ArithmeticException ex) { + // Display an error message + res.setText("Error"); + } + } + + + + } + }); + + } + private Boolean isOperator(char ch) + { + if(ch=='+' || ch=='-' || ch=='*' || ch=='/' || ch=='%') + { + return true; + } + return false; + } + private void setupVariables() + { + //RESULTS + res =(TextView) findViewById(R.id.tv_result); + eq = (TextView) findViewById(R.id.tv_equation); + + //NUMERICS + one = (Button) findViewById(R.id.one); + two = (Button) findViewById(R.id.two); + three = (Button) findViewById(R.id.three); + four = (Button) findViewById(R.id.four); + five = (Button) findViewById(R.id.five); + six = (Button) findViewById(R.id.six); + seven = (Button) findViewById(R.id.seven); + eight = (Button) findViewById(R.id.eight); + nine = (Button) findViewById(R.id.nine); + zero = (Button) findViewById(R.id.zero); + doubleZero = (Button) findViewById(R.id.doublezero); + + //OPERATIONS + add = (Button) findViewById(R.id.sum); + sub = (Button) findViewById(R.id.subtract); + mul = (Button) findViewById(R.id.multiply); + div = (Button) findViewById(R.id.divide); + mod = (Button) findViewById(R.id.mod); + ac = (Button) findViewById(R.id.ac); + del = (Button) findViewById(R.id.del); + fract = (Button) findViewById(R.id.decimal); + equal = (Button) findViewById(R.id.equal); } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index da939a0..2f1152f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -13,7 +13,6 @@ android:layout_width="match_parent" android:layout_height="150dp" android:gravity="right|bottom" - android:text="1200*20*60" android:textColor="@color/white" android:textSize="9pt" app:layout_constraintEnd_toEndOf="parent" @@ -25,20 +24,20 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" - android:text="5,760,000" android:textColor="@color/white" android:textSize="18pt" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_equation" /> - + - + android:textSize="10pt" + android:background="@null" + /> - + android:textSize="10pt" + android:background="@null"/> - + android:textSize="10pt" + android:background="@null"/> - + android:textSize="10pt" + android:background="@null"/> @@ -105,7 +113,8 @@ android:layout_weight="1" android:orientation="horizontal"> - + android:textSize="10pt" + android:background="@null"/> - + android:textSize="10pt" + android:background="@null"/> - - +