diff options
author | Christine Franks <christyfranks@google.com> | 2016-12-08 15:03:53 -0800 |
---|---|---|
committer | Christine Franks <christyfranks@google.com> | 2016-12-09 13:25:02 -0800 |
commit | 61c0ed92544a67f9976a6a305489a9b879de549b (patch) | |
tree | 58b98548fdd0e4fbe645c63dc17ab96116218899 | |
parent | f442477a08c2983d5027fcd40682b16f4f577caa (diff) | |
download | android_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.java | 5 | ||||
-rw-r--r-- | src/com/android/calculator2/CalculatorFormula.java | 35 | ||||
-rw-r--r-- | src/com/android/calculator2/Evaluator.java | 13 |
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); } /** |