summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorAnnie Chin <afchin@google.com>2016-12-12 13:45:24 -0800
committerAnnie Chin <afchin@google.com>2016-12-12 15:15:18 -0800
commite5567fd0f0451fb275b33a9a57b4d520f3d9d2a7 (patch)
tree109eaef422b96ecebf1f6eb044ec69bec344cada /src/com
parent12874e3825748487770c5ab4d45f7ef23a0df4e3 (diff)
downloadandroid_packages_apps_ExactCalculator-e5567fd0f0451fb275b33a9a57b4d520f3d9d2a7.tar.gz
android_packages_apps_ExactCalculator-e5567fd0f0451fb275b33a9a57b4d520f3d9d2a7.tar.bz2
android_packages_apps_ExactCalculator-e5567fd0f0451fb275b33a9a57b4d520f3d9d2a7.zip
Silently cancel evaluation on history pulldown.
Fixes: 33500983 -Suppress cancel message if quiet=true even if reevaluation is in progress -Remove existing timeout callbacks before posting another Change-Id: Iee8e69307f2d5ee97307d5e0769123ea7118ce45
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/calculator2/Calculator.java8
-rw-r--r--src/com/android/calculator2/Evaluator.java11
2 files changed, 11 insertions, 8 deletions
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index 545de6f..b45597a 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -1296,8 +1296,12 @@ public class Calculator extends Activity
private boolean prepareForHistory() {
if (mCurrentState == CalculatorState.ANIMATE) {
throw new AssertionError("onUserInteraction should have ended animation");
- } else if (mCurrentState == CalculatorState.EVALUATE
- || mCurrentState == CalculatorState.INIT) {
+ } else if (mCurrentState == CalculatorState.EVALUATE) {
+ // Cancel current evaluation
+ cancelIfEvaluating(true /* quiet */ );
+ setState(CalculatorState.INPUT);
+ return true;
+ } else if (mCurrentState == CalculatorState.INIT) {
// Easiest to just refuse. Otherwise we can see a state change
// while in history mode, which causes all sorts of problems.
// TODO: Consider other alternatives. If we're just doing the decimal conversion
diff --git a/src/com/android/calculator2/Evaluator.java b/src/com/android/calculator2/Evaluator.java
index 241c187..dad1d95 100644
--- a/src/com/android/calculator2/Evaluator.java
+++ b/src/com/android/calculator2/Evaluator.java
@@ -29,11 +29,9 @@ import android.util.Log;
import com.hp.creals.CR;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutput;
-import java.io.DataOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -526,6 +524,7 @@ public class Evaluator implements CalculatorExpr.ExprResolver {
handleTimeout();
}
};
+ mTimeoutHandler.removeCallbacks(mTimeoutRunnable);
mTimeoutHandler.postDelayed(mTimeoutRunnable, timeout);
}
@@ -1216,17 +1215,17 @@ public class Evaluator implements CalculatorExpr.ExprResolver {
*/
private boolean cancel(ExprInfo expr, boolean quiet) {
if (expr.mEvaluator != null) {
+ if (quiet) {
+ ((AsyncEvaluator)(expr.mEvaluator)).suppressCancelMessage();
+ }
// Reevaluation in progress.
- if (expr.mVal != null) {
+ if (expr.mVal.get() != null) {
expr.mEvaluator.cancel(true);
expr.mResultStringOffsetReq = expr.mResultStringOffset;
// Backgound computation touches only constructive reals.
// OK not to wait.
expr.mEvaluator = null;
} else {
- if (quiet) {
- ((AsyncEvaluator)(expr.mEvaluator)).suppressCancelMessage();
- }
expr.mEvaluator.cancel(true);
if (expr == mMainExpr) {
// The expression is modifiable, and the AsyncTask is reading it.