summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/values-land/styles.xml4
-rw-r--r--res/values-port/styles.xml4
-rw-r--r--res/values-sw600dp-land/styles.xml4
-rw-r--r--res/values-sw600dp-port/styles.xml4
-rw-r--r--res/values-sw800dp-land/styles.xml4
-rw-r--r--res/values-sw800dp-port/styles.xml6
-rw-r--r--src/com/android/calculator2/Calculator.java18
-rw-r--r--src/com/android/calculator2/CalculatorResult.java7
-rw-r--r--src/com/android/calculator2/Evaluator.java13
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