summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Boehm <hboehm@google.com>2015-06-10 01:40:52 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-06-10 01:40:52 +0000
commit223df831eca3c0ff175df186f549566198d2d1f9 (patch)
tree0c898c48c83a453f74ac94b509f51b2a18737f70
parent2aa88db31bf10c7e66296ed32ec65552319b84b8 (diff)
parent187d3e93b13bf0d8711ad5ecaab2deb9909b5f23 (diff)
downloadandroid_packages_apps_ExactCalculator-223df831eca3c0ff175df186f549566198d2d1f9.tar.gz
android_packages_apps_ExactCalculator-223df831eca3c0ff175df186f549566198d2d1f9.tar.bz2
android_packages_apps_ExactCalculator-223df831eca3c0ff175df186f549566198d2d1f9.zip
am 187d3e93: Improve logic for when to display instant result
* commit '187d3e93b13bf0d8711ad5ecaab2deb9909b5f23': Improve logic for when to display instant result
-rw-r--r--src/com/android/calculator2/CalculatorExpr.java15
-rw-r--r--src/com/android/calculator2/Evaluator.java13
2 files changed, 17 insertions, 11 deletions
diff --git a/src/com/android/calculator2/CalculatorExpr.java b/src/com/android/calculator2/CalculatorExpr.java
index c5ad301..8b3cb40 100644
--- a/src/com/android/calculator2/CalculatorExpr.java
+++ b/src/com/android/calculator2/CalculatorExpr.java
@@ -305,7 +305,12 @@ class CalculatorExpr {
return KeyMaps.translateResult(mShortRep);
}
@Override
- TokenKind kind() { return TokenKind.PRE_EVAL; }
+ TokenKind kind() {
+ return TokenKind.PRE_EVAL;
+ }
+ boolean hasEllipsis() {
+ return mShortRep.lastIndexOf(KeyMaps.ELLIPSIS) != -1;
+ }
}
static Token newToken(DataInput in) throws IOException {
@@ -916,10 +921,10 @@ class CalculatorExpr {
}
for (int i = first; i < last; ++i) {
Token t1 = mExpr.get(i);
- if (!(t1 instanceof Constant)) return true;
- // We consider preevaluated expressions "interesting",
- // since the evaluation will usually result in more precision
- // than the "short representation".
+ if (t1 instanceof Operator
+ || t1 instanceof PreEval && ((PreEval)t1).hasEllipsis()) {
+ return true;
+ }
}
return false;
}
diff --git a/src/com/android/calculator2/Evaluator.java b/src/com/android/calculator2/Evaluator.java
index 16121f5..8d10210 100644
--- a/src/com/android/calculator2/Evaluator.java
+++ b/src/com/android/calculator2/Evaluator.java
@@ -188,9 +188,8 @@ class Evaluator {
// Currently running expression evaluator, if any.
private boolean mChangedValue;
- // Last insertion or deletion may have changed the display value
- // of the expression.
- // We handle deletions very conservatively.
+ // The expression may have changed since the last evaluation in ways that would
+ // affect its value.
Evaluator(Calculator calculator,
CalculatorResult resultDisplay) {
@@ -791,6 +790,7 @@ class Evaluator {
clearCache();
mEvaluator = new AsyncDisplayResult(mDegreeMode, false);
mEvaluator.execute();
+ mChangedValue = false;
}
// Ensure that we either display a result or complain.
@@ -835,6 +835,7 @@ class Evaluator {
// Approximation of constructive reals should be thread-safe,
// so we can let that continue until it notices the cancellation.
mEvaluator = null;
+ mChangedValue = true; // Didn't do the expected evaluation.
return true;
}
return false;
@@ -874,9 +875,8 @@ class Evaluator {
add10pow(); // Handled as macro expansion.
return true;
} else {
- mChangedValue = (KeyMaps.digVal(id) != KeyMaps.NOT_DIGIT
- || KeyMaps.isSuffix(id)
- || id == R.id.const_pi || id == R.id.const_e);
+ mChangedValue = mChangedValue || (KeyMaps.digVal(id) != KeyMaps.NOT_DIGIT
+ || KeyMaps.isSuffix(id) || id == R.id.const_pi || id == R.id.const_e);
return mExpr.add(id);
}
}
@@ -918,6 +918,7 @@ class Evaluator {
final CalculatorExpr abbrvExpr = getResultExpr();
clear();
mExpr.append(abbrvExpr);
+ mChangedValue = true;
}
// Same as above, but put result in mSaved, leaving mExpr alone.