Improve copy/paste menu appearance
Bug: 20503008
Correctly provide content position information to the ActionMode so
that menues can be better positioned.
Highlight a result that's about to be copied.
Ensure that the end of the current formula becomes visible when
the paste menu appears.
Change-Id: I318985776e59175b827d5089c0ca4978f3a658cb
diff --git a/src/com/android/calculator2/CalculatorText.java b/src/com/android/calculator2/CalculatorText.java
index b41b6d3..b0bbb7c 100644
--- a/src/com/android/calculator2/CalculatorText.java
+++ b/src/com/android/calculator2/CalculatorText.java
@@ -20,6 +20,7 @@
import android.content.ClipboardManager;
import android.content.Context;
import android.content.res.TypedArray;
+import android.graphics.Rect;
import android.text.Layout;
import android.text.TextPaint;
import android.text.method.ScrollingMovementMethod;
@@ -37,7 +38,8 @@
*/
public class CalculatorText extends AlignedTextView implements View.OnLongClickListener {
- private final ActionMode.Callback mPasteActionModeCallback = new ActionMode.Callback() {
+ private final ActionMode.Callback2 mPasteActionModeCallback = new ActionMode.Callback2() {
+
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if (item.getItemId() == R.id.menu_paste) {
@@ -53,6 +55,7 @@
final ClipboardManager clipboard = (ClipboardManager) getContext()
.getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard.hasPrimaryClip()) {
+ bringPointIntoView(length());
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.paste, menu);
return true;
@@ -70,6 +73,16 @@
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
}
+
+ @Override
+ public void onGetContentRect(ActionMode mode, View view, Rect outRect) {
+ super.onGetContentRect(mode, view, outRect);
+ outRect.top += getTotalPaddingTop();
+ outRect.right -= getTotalPaddingRight();
+ outRect.bottom -= getTotalPaddingBottom();
+ // Encourage menu positioning towards the right, possibly over formula.
+ outRect.left = outRect.right;
+ }
};
// Temporary paint for use in layout methods.