Move mStoreToMemoryRequested to CalculatorResult.
Fixes: 33085082
Change-Id: Ifa95eafd1fd94d8efd16a5bdb802385c0f30ea88
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index e22e628..f41d87e 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -253,9 +253,6 @@
private HistoryFragment mHistoryFragment = new HistoryFragment();
- // The user requested that the result currently being evaluated should be stored to "memory".
- private boolean mStoreToMemoryRequested = false;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -769,7 +766,7 @@
}
return;
case R.id.memory_store:
- onMemoryStore();
+ mResultText.onMemoryStore();
return;
case R.id.memory_recall:
onMemoryRecall();
@@ -819,10 +816,7 @@
if (index != Evaluator.MAIN_INDEX) {
throw new AssertionError("Unexpected evaluation result index\n");
}
- if (mStoreToMemoryRequested) {
- mEvaluator.copyToMemory(Evaluator.MAIN_INDEX);
- mStoreToMemoryRequested = false;
- }
+
// Invalidate any options that may depend on the current result.
invalidateOptionsMenu();
@@ -926,18 +920,6 @@
redisplayAfterFormulaChange();
}
- private void onMemoryStore() {
- if (mCurrentState == CalculatorState.RESULT) {
- mEvaluator.copyToMemory(Evaluator.MAIN_INDEX);
- } else {
- // Defer the store until we have the actual result.
- mStoreToMemoryRequested = true;
- if (mCurrentState == CalculatorState.INPUT) {
- onEquals();
- }
- }
- }
-
private void onMemoryRecall() {
clearIfNotInputState();
long memoryIndex = mEvaluator.getMemoryIndex();
diff --git a/src/com/android/calculator2/CalculatorResult.java b/src/com/android/calculator2/CalculatorResult.java
index c604a6f..e001bee 100644
--- a/src/com/android/calculator2/CalculatorResult.java
+++ b/src/com/android/calculator2/CalculatorResult.java
@@ -142,6 +142,9 @@
private ActionMode.Callback mCopyActionModeCallback;
private ContextMenu mContextMenu;
+ // The user requested that the result currently being evaluated should be stored to "memory".
+ private boolean mStoreToMemoryRequested = false;
+
public CalculatorResult(Context context, AttributeSet attrs) {
super(context, attrs);
mScroller = new OverScroller(context);
@@ -384,10 +387,29 @@
public void onEvaluate(long index, int initPrec, int msd, int leastDigPos,
String truncatedWholePart) {
initPositions(initPrec, msd, leastDigPos, truncatedWholePart);
+
+ if (mStoreToMemoryRequested) {
+ mEvaluator.copyToMemory(index);
+ mStoreToMemoryRequested = false;
+ }
redisplay();
}
/**
+ * Store the result for this index if it is available.
+ * If it is unavailable, set mStoreToMemoryRequested to indicate that we should store
+ * when evaluation is complete.
+ */
+ public void onMemoryStore() {
+ if (mEvaluator.hasResult(mIndex)) {
+ mEvaluator.copyToMemory(mIndex);
+ } else {
+ mStoreToMemoryRequested = true;
+ mEvaluator.requireResult(mIndex, this /* listener */, this /* CharMetricsInfo */);
+ }
+ }
+
+ /**
* Set up scroll bounds (mMinPos, mMaxPos, etc.) and determine whether the result is
* scrollable, based on the supplied information about the result.
* This is unfortunately complicated because we need to predict whether trailing digits
@@ -513,6 +535,7 @@
*/
@Override
public void onError(long index, int resourceId) {
+ mStoreToMemoryRequested = false;
mValid = true;
setLongClickable(false);
mScrollable = false;
@@ -818,6 +841,7 @@
@Override
public void onCancelled(long index) {
clear();
+ mStoreToMemoryRequested = false;
}
/**