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.