diff options
author | Hans Boehm <hboehm@google.com> | 2015-08-04 01:17:24 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-08-04 01:17:24 +0000 |
commit | 877dd4f5a258281f11119e304a9b8ac4ed8cdf3b (patch) | |
tree | 7a46472221ce8149d5450bf59e18579237ff4fef | |
parent | 5edb1cb046b0769707512e9efbd2bcaed8d24fc8 (diff) | |
parent | dc0767d3460b2be8526d955ab3b3b0ffee927e42 (diff) | |
download | android_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.java | 28 |
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; } } |