diff options
-rw-r--r-- | res/values-land/styles.xml | 4 | ||||
-rw-r--r-- | res/values-port/styles.xml | 4 | ||||
-rw-r--r-- | res/values-sw600dp-land/styles.xml | 4 | ||||
-rw-r--r-- | res/values-sw600dp-port/styles.xml | 4 | ||||
-rw-r--r-- | res/values-sw800dp-land/styles.xml | 4 | ||||
-rw-r--r-- | res/values-sw800dp-port/styles.xml | 6 | ||||
-rw-r--r-- | src/com/android/calculator2/Calculator.java | 18 | ||||
-rw-r--r-- | src/com/android/calculator2/CalculatorResult.java | 7 | ||||
-rw-r--r-- | src/com/android/calculator2/Evaluator.java | 13 |
9 files changed, 42 insertions, 22 deletions
diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml index 074796a..1cfcf4f 100644 --- a/res/values-land/styles.xml +++ b/res/values-land/styles.xml @@ -20,14 +20,14 @@ <style name="DisplayEditTextStyle.Formula"> <item name="android:paddingTop">0dip</item> - <item name="android:paddingBottom">6dip</item> + <item name="android:paddingBottom">12dip</item> <item name="android:paddingStart">32dip</item> <item name="android:paddingEnd">32dip</item> <item name="android:textSize">30sp</item> </style> <style name="DisplayTextStyle.Result"> - <item name="android:paddingTop">6dip</item> + <item name="android:paddingTop">0dip</item> <item name="android:paddingBottom">12dip</item> <item name="android:paddingStart">32dip</item> <item name="android:paddingEnd">32dip</item> diff --git a/res/values-port/styles.xml b/res/values-port/styles.xml index a067b48..aae4ca1 100644 --- a/res/values-port/styles.xml +++ b/res/values-port/styles.xml @@ -20,7 +20,7 @@ <style name="DisplayEditTextStyle.Formula"> <item name="android:paddingTop">8dip</item> - <item name="android:paddingBottom">16dip</item> + <item name="android:paddingBottom">24dip</item> <item name="android:paddingStart">16dip</item> <item name="android:paddingEnd">16dip</item> <item name="minTextSize">36sp</item> @@ -29,7 +29,7 @@ </style> <style name="DisplayTextStyle.Result"> - <item name="android:paddingTop">16dip</item> + <item name="android:paddingTop">8dip</item> <item name="android:paddingBottom">32dip</item> <item name="android:paddingStart">16dip</item> <item name="android:paddingEnd">16dip</item> diff --git a/res/values-sw600dp-land/styles.xml b/res/values-sw600dp-land/styles.xml index 18774f2..dcbfeb4 100644 --- a/res/values-sw600dp-land/styles.xml +++ b/res/values-sw600dp-land/styles.xml @@ -20,14 +20,14 @@ <style name="DisplayEditTextStyle.Formula"> <item name="android:paddingTop">0dip</item> - <item name="android:paddingBottom">26dip</item> + <item name="android:paddingBottom">52dip</item> <item name="android:paddingStart">44dip</item> <item name="android:paddingEnd">44dip</item> <item name="android:textSize">48sp</item> </style> <style name="DisplayTextStyle.Result"> - <item name="android:paddingTop">26dip</item> + <item name="android:paddingTop">0dip</item> <item name="android:paddingBottom">46dip</item> <item name="android:paddingStart">44dip</item> <item name="android:paddingEnd">44dip</item> diff --git a/res/values-sw600dp-port/styles.xml b/res/values-sw600dp-port/styles.xml index b5f1569..623f4c0 100644 --- a/res/values-sw600dp-port/styles.xml +++ b/res/values-sw600dp-port/styles.xml @@ -21,7 +21,7 @@ <style name="DisplayEditTextStyle.Formula"> <item name="android:paddingTop">16dip</item> - <item name="android:paddingBottom">32dip</item> + <item name="android:paddingBottom">48dip</item> <item name="android:paddingStart">44dip</item> <item name="android:paddingEnd">44dip</item> <item name="minTextSize">48sp</item> @@ -30,7 +30,7 @@ </style> <style name="DisplayTextStyle.Result"> - <item name="android:paddingTop">32dip</item> + <item name="android:paddingTop">16dip</item> <item name="android:paddingBottom">90dip</item> <item name="android:paddingStart">44dip</item> <item name="android:paddingEnd">44dip</item> diff --git a/res/values-sw800dp-land/styles.xml b/res/values-sw800dp-land/styles.xml index a5bfdd3..b834d8c 100644 --- a/res/values-sw800dp-land/styles.xml +++ b/res/values-sw800dp-land/styles.xml @@ -20,7 +20,7 @@ <style name="DisplayEditTextStyle.Formula"> <item name="android:paddingTop">16dip</item> - <item name="android:paddingBottom">26dip</item> + <item name="android:paddingBottom">42dip</item> <item name="android:paddingStart">44dip</item> <item name="android:paddingEnd">44dip</item> <item name="minTextSize">56sp</item> @@ -29,7 +29,7 @@ </style> <style name="DisplayTextStyle.Result"> - <item name="android:paddingTop">26dip</item> + <item name="android:paddingTop">10dip</item> <item name="android:paddingBottom">46dip</item> <item name="android:paddingStart">44dip</item> <item name="android:paddingEnd">44dip</item> diff --git a/res/values-sw800dp-port/styles.xml b/res/values-sw800dp-port/styles.xml index 47e88f1..881a033 100644 --- a/res/values-sw800dp-port/styles.xml +++ b/res/values-sw800dp-port/styles.xml @@ -20,7 +20,7 @@ <style name="DisplayEditTextStyle.Formula"> <item name="android:paddingTop">16dip</item> - <item name="android:paddingBottom">32dip</item> + <item name="android:paddingBottom">68dip</item> <item name="android:paddingStart">44dip</item> <item name="android:paddingEnd">44dip</item> <item name="minTextSize">56sp</item> @@ -29,8 +29,8 @@ </style> <style name="DisplayTextStyle.Result"> - <item name="android:paddingTop">32dip</item> - <item name="android:paddingBottom">90dip</item> + <item name="android:paddingTop">6dip</item> + <item name="android:paddingBottom">80dip</item> <item name="android:paddingStart">44dip</item> <item name="android:paddingEnd">44dip</item> <item name="android:textSize">40sp</item> diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java index 0d4ab2d..9def2a7 100644 --- a/src/com/android/calculator2/Calculator.java +++ b/src/com/android/calculator2/Calculator.java @@ -168,6 +168,7 @@ public class Calculator extends Activity private static final String NAME = Calculator.class.getName(); private static final String KEY_DISPLAY_STATE = NAME + "_display_state"; + private static final String KEY_UNPROCESSED_CHARS = NAME + "_unprocessed_chars"; private static final String KEY_EVAL_STATE = NAME + "_eval_state"; // Associated value is a byte array holding both mCalculatorState // and the (much more complex) evaluator state. @@ -224,8 +225,11 @@ public class Calculator extends Activity setState(CalculatorState.values()[ savedInstanceState.getInt(KEY_DISPLAY_STATE, CalculatorState.INPUT.ordinal())]); - byte[] state = - savedInstanceState.getByteArray(KEY_EVAL_STATE); + CharSequence unprocessed = savedInstanceState.getCharSequence(KEY_UNPROCESSED_CHARS); + if (unprocessed != null) { + mUnprocessedChars = unprocessed.toString(); + } + byte[] state = savedInstanceState.getByteArray(KEY_EVAL_STATE); if (state != null) { try (ObjectInput in = new ObjectInputStream(new ByteArrayInputStream(state))) { mEvaluator.restoreInstanceState(in); @@ -268,6 +272,7 @@ public class Calculator extends Activity super.onSaveInstanceState(outState); outState.putInt(KEY_DISPLAY_STATE, mCurrentState.ordinal()); + outState.putCharSequence(KEY_UNPROCESSED_CHARS, mUnprocessedChars); ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream(); try (ObjectOutput out = new ObjectOutputStream(byteArrayStream)) { mEvaluator.saveInstanceState(out); @@ -588,12 +593,13 @@ public class Calculator extends Activity if (mEvaluator.getExpr().isEmpty()) { return; } - mUnprocessedChars = null; - mResult.clear(); - mEvaluator.clear(); reveal(mCurrentButton, R.color.calculator_accent_color, new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { + mUnprocessedChars = null; + mResult.clear(); + mEvaluator.clear(); + setState(CalculatorState.INPUT); redisplayFormula(); } }); @@ -639,7 +645,7 @@ public class Calculator extends Activity // This is how much we want to move the bottom. // Now compensate for the fact that we're // simultaenously expanding it around its center by half its height - resultTranslationY += mResult.getHeight() * (resultScale-1)/2; + resultTranslationY += mResult.getHeight() * (resultScale - 1)/2; final float formulaTranslationY = -mFormulaEditText.getBottom(); // TODO: Reintroduce textColorAnimator? diff --git a/src/com/android/calculator2/CalculatorResult.java b/src/com/android/calculator2/CalculatorResult.java index 6fac5a6..279c75e 100644 --- a/src/com/android/calculator2/CalculatorResult.java +++ b/src/com/android/calculator2/CalculatorResult.java @@ -64,6 +64,9 @@ public class CalculatorResult extends TextView { private Evaluator mEvaluator; private boolean mScrollable = false; // A scrollable result is currently displayed. + private boolean mValid = false; + // The result holds something valid; either a + // a number or an error message. private int mCurrentPos;// Position of right of display relative // to decimal point, in pixels. // Large positive values mean the decimal @@ -193,6 +196,7 @@ public class CalculatorResult extends TextView { } void displayError(int resourceId) { + mValid = true; mScrollable = false; setText(resourceId); } @@ -201,6 +205,7 @@ public class CalculatorResult extends TextView { // Return entire result (within reason) up to current displayed precision. public String getFullText() { + if (!mValid) return ""; if (!mScrollable) return getText().toString(); int currentCharPos = getCurrentCharPos(); return KeyMaps.translateResult( @@ -248,6 +253,7 @@ public class CalculatorResult extends TextView { } void clear() { + mValid = false; setText(""); } @@ -267,6 +273,7 @@ public class CalculatorResult extends TextView { } else { setText(result); } + mValid = true; mScrollable = true; } diff --git a/src/com/android/calculator2/Evaluator.java b/src/com/android/calculator2/Evaluator.java index 6af3043..25cadae 100644 --- a/src/com/android/calculator2/Evaluator.java +++ b/src/com/android/calculator2/Evaluator.java @@ -153,7 +153,7 @@ class Evaluator { private int mCacheDigsReq; // Number of digits that have been // requested. Only touched by UI // thread. - private final int INVALID_MSD = Integer.MIN_VALUE; + private final int INVALID_MSD = Integer.MAX_VALUE; private int mMsd = INVALID_MSD; // Position of most significant digit // in current cached result, if determined. // This is just the index in mCache @@ -440,7 +440,7 @@ class Evaluator { // have room for and the current string approximation for // the result. // lastDigit is the position of the last digit on the right - // or Integer.MAX_VALUE. + // if there is such a thing, or Integer.MAX_VALUE. // May be called in non-UI thread. int getPreferredPrec(String cache, int msd, int lastDigit) { int lineLength = mResult.getMaxChars(); @@ -459,7 +459,14 @@ class Evaluator { // Treat leading zero as msd. msd = wholeSize - 1; } - return Math.min(msd, MAX_MSD_PREC) - wholeSize + lineLength - 2; + if (msd > wholeSize + MAX_MSD_PREC) { + // Display a probably but uncertain 0 as "0.000000000", + // without exponent. That's a judgment call, but less likely + // to confuse naive users. A more informative and confusing + // option would be to use a large negative exponent. + return lineLength - 2; + } + return msd - wholeSize + lineLength - 2; } // Get a short representation of the value represented by |