diff options
author | Annie Chin <afchin@google.com> | 2016-12-12 13:45:24 -0800 |
---|---|---|
committer | Annie Chin <afchin@google.com> | 2016-12-12 15:15:18 -0800 |
commit | e5567fd0f0451fb275b33a9a57b4d520f3d9d2a7 (patch) | |
tree | 109eaef422b96ecebf1f6eb044ec69bec344cada /src/com | |
parent | 12874e3825748487770c5ab4d45f7ef23a0df4e3 (diff) | |
download | android_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.java | 8 | ||||
-rw-r--r-- | src/com/android/calculator2/Evaluator.java | 11 |
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. |