summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Boehm <hboehm@google.com>2015-08-04 01:17:24 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-08-04 01:17:24 +0000
commit877dd4f5a258281f11119e304a9b8ac4ed8cdf3b (patch)
tree7a46472221ce8149d5450bf59e18579237ff4fef
parent5edb1cb046b0769707512e9efbd2bcaed8d24fc8 (diff)
parentdc0767d3460b2be8526d955ab3b3b0ffee927e42 (diff)
downloadandroid_packages_apps_ExactCalculator-877dd4f5a258281f11119e304a9b8ac4ed8cdf3b.tar.gz
android_packages_apps_ExactCalculator-877dd4f5a258281f11119e304a9b8ac4ed8cdf3b.tar.bz2
android_packages_apps_ExactCalculator-877dd4f5a258281f11119e304a9b8ac4ed8cdf3b.zip
am dc0767d3: am 63bd424a: am 80018c88: Properly reserve display space for non-digits
* commit 'dc0767d3460b2be8526d955ab3b3b0ffee927e42': Properly reserve display space for non-digits
-rw-r--r--src/com/android/calculator2/CalculatorResult.java28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/com/android/calculator2/CalculatorResult.java b/src/com/android/calculator2/CalculatorResult.java
index 8d3dfee..1efa67b 100644
--- a/src/com/android/calculator2/CalculatorResult.java
+++ b/src/com/android/calculator2/CalculatorResult.java
@@ -102,7 +102,9 @@ public class CalculatorResult extends AlignedTextView {
// we switch to scientific notation with positive exponent.
private static final int SCI_NOTATION_EXTRA = 1;
// Extra digits for standard scientific notation. In this case we
- // have a deecimal point and no ellipsis.
+ // have a decimal point and no ellipsis.
+ // We assume that we do not drop digits to make room for the decimal
+ // point in ordinary scientific notation. Thus >= 1.
private ActionMode mActionMode;
private final ForegroundColorSpan mExponentColorSpan;
@@ -180,10 +182,24 @@ public class CalculatorResult extends AlignedTextView {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final TextPaint paint = getPaint();
- final int newWidthConstraint = MeasureSpec.getSize(widthMeasureSpec)
- - (getPaddingLeft() + getPaddingRight())
- - (int) Math.ceil(Layout.getDesiredWidth(KeyMaps.ELLIPSIS, paint));
+ final Context context = getContext();
final float newCharWidth = Layout.getDesiredWidth("\u2007", paint);
+ // Digits are presumed to have no more than newCharWidth.
+ // We sometimes replace a character by an ellipsis or, due to SCI_NOTATION_EXTRA, add
+ // an extra decimal separator beyond the maximum number of characters we normally allow.
+ // Empirically, our minus sign is also slightly wider than a digit, so we have to
+ // account for that. We never have both an ellipsis and two minus signs, and
+ // we assume an ellipsis is no narrower than a minus sign.
+ final float decimalSeparatorWidth = Layout.getDesiredWidth(
+ context.getString(R.string.dec_point), paint);
+ final float minusExtraWidth = Layout.getDesiredWidth(
+ context.getString(R.string.op_sub), paint) - newCharWidth;
+ final float ellipsisExtraWidth = Layout.getDesiredWidth(KeyMaps.ELLIPSIS, paint)
+ - newCharWidth;
+ final int extraWidth = (int) (Math.ceil(Math.max(decimalSeparatorWidth + minusExtraWidth,
+ ellipsisExtraWidth)) + Math.max(minusExtraWidth, 0.0f));
+ final int newWidthConstraint = MeasureSpec.getSize(widthMeasureSpec)
+ - (getPaddingLeft() + getPaddingRight()) - extraWidth;
synchronized(mWidthLock) {
mWidthConstraint = newWidthConstraint;
mCharWidth = newCharWidth;
@@ -474,9 +490,7 @@ public class CalculatorResult extends AlignedTextView {
// Return something conservatively big, to force sufficient evaluation.
return MAX_WIDTH;
} else {
- // Always allow for the ellipsis character which already accounted for in the width
- // constraint.
- return result + 1;
+ return result;
}
}