summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristine Franks <christyfranks@google.com>2016-12-08 15:03:53 -0800
committerChristine Franks <christyfranks@google.com>2016-12-09 13:25:02 -0800
commit61c0ed92544a67f9976a6a305489a9b879de549b (patch)
tree58b98548fdd0e4fbe645c63dc17ab96116218899
parentf442477a08c2983d5027fcd40682b16f4f577caa (diff)
downloadandroid_packages_apps_ExactCalculator-61c0ed92544a67f9976a6a305489a9b879de549b.tar.gz
android_packages_apps_ExactCalculator-61c0ed92544a67f9976a6a305489a9b879de549b.tar.bz2
android_packages_apps_ExactCalculator-61c0ed92544a67f9976a6a305489a9b879de549b.zip
Enable MR when MS after start without a pasteable clip
Bug: 33458518 Test: manual - have nothing in the clipboard, open the app, tap 'MS' in the context menu, long-press the formula and the 'MR' button should appear in the context menu. Change-Id: I690906cb8ad57c4f5b45309c0670550f7089cbf6
-rw-r--r--src/com/android/calculator2/Calculator.java5
-rw-r--r--src/com/android/calculator2/CalculatorFormula.java35
-rw-r--r--src/com/android/calculator2/Evaluator.java13
3 files changed, 31 insertions, 22 deletions
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index 6c3707c..4111d6f 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -943,6 +943,10 @@ public class Calculator extends Activity
mResultText.onReevaluate(index);
}
+ public void onMemoryStateChanged() {
+ mFormulaText.onMemoryStateChanged();
+ }
+
@Override
public void onTextSizeChanged(final TextView textView, float oldSize) {
if (mCurrentState != CalculatorState.INPUT) {
@@ -1240,6 +1244,7 @@ public class Calculator extends Activity
// TODO: It's not clear what we should really do here. This is an initial hack.
// May want to make onClearAnimationEnd() private if/when we fix this.
onClearAnimationEnd();
+ onMemoryStateChanged();
onBackPressed();
} else if (fragment.getTag() == Evaluator.TIMEOUT_DIALOG_TAG) {
// Timeout extension request.
diff --git a/src/com/android/calculator2/CalculatorFormula.java b/src/com/android/calculator2/CalculatorFormula.java
index c681760..b342792 100644
--- a/src/com/android/calculator2/CalculatorFormula.java
+++ b/src/com/android/calculator2/CalculatorFormula.java
@@ -55,9 +55,9 @@ public class CalculatorFormula extends AlignedTextView implements MenuItem.OnMen
private final ClipboardManager mClipboardManager;
private int mWidthConstraint = -1;
- private ActionMode mActionMode;
+ protected ActionMode mActionMode;
private ActionMode.Callback mPasteActionModeCallback;
- private ContextMenu mContextMenu;
+ protected ContextMenu mContextMenu;
private OnTextSizeChangeListener mOnTextSizeChangeListener;
private OnFormulaContextMenuClickListener mOnContextMenuClickListener;
private Calculator.OnDisplayMemoryOperationsListener mOnDisplayMemoryOperationsListener;
@@ -331,9 +331,7 @@ public class CalculatorFormula extends AlignedTextView implements MenuItem.OnMen
}
private boolean createContextMenu(MenuInflater inflater, Menu menu) {
- final ClipboardManager clipboard = (ClipboardManager) getContext()
- .getSystemService(Context.CLIPBOARD_SERVICE);
- final boolean isPasteEnabled = clipboard.hasPrimaryClip();
+ final boolean isPasteEnabled = isPasteEnabled();
final boolean isMemoryEnabled = isMemoryEnabled();
if (!isPasteEnabled && !isMemoryEnabled) {
return false;
@@ -349,9 +347,7 @@ public class CalculatorFormula extends AlignedTextView implements MenuItem.OnMen
}
private void paste() {
- final ClipboardManager clipboard = (ClipboardManager) getContext()
- .getSystemService(Context.CLIPBOARD_SERVICE);
- final ClipData primaryClip = clipboard.getPrimaryClip();
+ final ClipData primaryClip = mClipboardManager.getPrimaryClip();
if (primaryClip != null && mOnContextMenuClickListener != null) {
mOnContextMenuClickListener.onPaste(primaryClip);
}
@@ -373,10 +369,22 @@ public class CalculatorFormula extends AlignedTextView implements MenuItem.OnMen
@Override
public void onPrimaryClipChanged() {
+ setLongClickable(isPasteEnabled() || isMemoryEnabled());
+ }
+
+ public void onMemoryStateChanged() {
+ setLongClickable(isPasteEnabled() || isMemoryEnabled());
+ }
+
+ private boolean isMemoryEnabled() {
+ return !(mOnDisplayMemoryOperationsListener == null || mOnContextMenuClickListener == null)
+ && mOnDisplayMemoryOperationsListener.shouldDisplayMemory();
+ }
+
+ private boolean isPasteEnabled() {
final ClipData clip = mClipboardManager.getPrimaryClip();
if (clip == null || clip.getItemCount() == 0) {
- setLongClickable(isMemoryEnabled());
- return;
+ return false;
}
CharSequence clipText = null;
try {
@@ -384,12 +392,7 @@ public class CalculatorFormula extends AlignedTextView implements MenuItem.OnMen
} catch (Exception e) {
Log.i("Calculator", "Error reading clipboard:", e);
}
- setLongClickable(!TextUtils.isEmpty(clipText) || isMemoryEnabled());
- }
-
- private boolean isMemoryEnabled() {
- return !(mOnDisplayMemoryOperationsListener == null || mOnContextMenuClickListener == null)
- && mOnDisplayMemoryOperationsListener.shouldDisplayMemory();
+ return !TextUtils.isEmpty(clipText);
}
public interface OnTextSizeChangeListener {
diff --git a/src/com/android/calculator2/Evaluator.java b/src/com/android/calculator2/Evaluator.java
index 1490526..7f01766 100644
--- a/src/com/android/calculator2/Evaluator.java
+++ b/src/com/android/calculator2/Evaluator.java
@@ -255,7 +255,7 @@ public class Evaluator implements CalculatorExpr.ExprResolver {
// estimating exponent size for truncating short representation.
private static final int EXP_COST = 3;
- private final Activity mActivity;
+ private final Calculator mCalculator;
// A hopefully unique name associated with mSaved.
private String mSavedName;
@@ -333,12 +333,12 @@ public class Evaluator implements CalculatorExpr.ExprResolver {
}
Evaluator(Calculator calculator) {
- mActivity = calculator;
+ mCalculator = calculator;
setMainExpr(new ExprInfo(new CalculatorExpr(), false));
mSavedName = "none";
mTimeoutHandler = new Handler();
- mExprDB = new ExpressionDB(mActivity);
+ mExprDB = new ExpressionDB(mCalculator);
mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(calculator);
mMainExpr.mDegreeMode = mSharedPrefs.getBoolean(KEY_PREF_DEGREE_MODE, false);
long savedIndex = mSharedPrefs.getLong(KEY_PREF_SAVED_INDEX, 0L);
@@ -404,7 +404,7 @@ public class Evaluator implements CalculatorExpr.ExprResolver {
}
private void displayCancelledMessage() {
- AlertDialogFragment.showMessageDialog(mActivity, 0, R.string.cancelled, 0, null);
+ AlertDialogFragment.showMessageDialog(mCalculator, 0, R.string.cancelled, 0, null);
}
// Timeout handling.
@@ -443,7 +443,7 @@ public class Evaluator implements CalculatorExpr.ExprResolver {
private static final int QUICK_MAX_RESULT_BITS = 150000;
private void displayTimeoutMessage(boolean longTimeout) {
- AlertDialogFragment.showMessageDialog(mActivity, R.string.dialog_timeout,
+ AlertDialogFragment.showMessageDialog(mCalculator, R.string.dialog_timeout,
R.string.timeout, longTimeout ? 0 : R.string.ok_remove_timeout,
TIMEOUT_DIALOG_TAG);
}
@@ -1610,6 +1610,7 @@ public class Evaluator implements CalculatorExpr.ExprResolver {
* The expression at index is presumed to have been evaluated.
*/
public void copyToMemory(long index) {
+ mCalculator.onMemoryStateChanged();
setMemoryIndex((index == MAIN_INDEX) ? preserve(false) : index);
}
@@ -1837,7 +1838,7 @@ public class Evaluator implements CalculatorExpr.ExprResolver {
}
public Spannable getExprAsSpannable(long index) {
- return getExpr(index).toSpannableStringBuilder(mActivity);
+ return getExpr(index).toSpannableStringBuilder(mCalculator);
}
/**