diff options
author | Hans Boehm <hboehm@google.com> | 2015-06-19 01:43:57 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-06-19 01:43:57 +0000 |
commit | 380f24f11d8b20575011c6153c71cbeac14b2395 (patch) | |
tree | 6f69ebfefda7b429490ddc9bc72ace95b17d0da7 | |
parent | a80460439c7562bfc71139cfde38d7998078d76b (diff) | |
parent | 7f83e36b7a1cb358b8dd44da842a3897b65bfdde (diff) | |
download | android_packages_apps_ExactCalculator-380f24f11d8b20575011c6153c71cbeac14b2395.tar.gz android_packages_apps_ExactCalculator-380f24f11d8b20575011c6153c71cbeac14b2395.tar.bz2 android_packages_apps_ExactCalculator-380f24f11d8b20575011c6153c71cbeac14b2395.zip |
am 7f83e36b: Improve copy/paste menu appearance
* commit '7f83e36b7a1cb358b8dd44da842a3897b65bfdde':
Improve copy/paste menu appearance
-rw-r--r-- | res/layout/display.xml | 1 | ||||
-rw-r--r-- | src/com/android/calculator2/CalculatorResult.java | 34 | ||||
-rw-r--r-- | src/com/android/calculator2/CalculatorText.java | 15 |
3 files changed, 48 insertions, 2 deletions
diff --git a/res/layout/display.xml b/res/layout/display.xml index 6500dfe..638f0d2 100644 --- a/res/layout/display.xml +++ b/res/layout/display.xml @@ -57,6 +57,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/formula" + android:bufferType="spannable" android:singleLine="true" android:textColor="@color/display_result_text_color" /> diff --git a/src/com/android/calculator2/CalculatorResult.java b/src/com/android/calculator2/CalculatorResult.java index 34c8f9a..0c4c18f 100644 --- a/src/com/android/calculator2/CalculatorResult.java +++ b/src/com/android/calculator2/CalculatorResult.java @@ -20,10 +20,13 @@ import android.content.ClipData; import android.content.ClipDescription; import android.content.ClipboardManager; import android.content.Context; +import android.graphics.Rect; import android.text.Layout; +import android.text.Spannable; import android.text.SpannableString; import android.text.Spanned; import android.text.TextPaint; +import android.text.style.BackgroundColorSpan; import android.text.style.ForegroundColorSpan; import android.util.AttributeSet; import android.view.ActionMode; @@ -522,11 +525,26 @@ public class CalculatorResult extends AlignedTextView { // Copy support: - private ActionMode.Callback mCopyActionModeCallback = new ActionMode.Callback() { + private ActionMode.Callback2 mCopyActionModeCallback = new ActionMode.Callback2() { + + private BackgroundColorSpan mHighlightSpan; + + private void highlightResult() { + final Spannable text = (Spannable) getText(); + mHighlightSpan = new BackgroundColorSpan(getHighlightColor()); + text.setSpan(mHighlightSpan, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + + private void unhighlightResult() { + final Spannable text = (Spannable) getText(); + text.removeSpan(mHighlightSpan); + } + @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.copy, menu); + highlightResult(); return true; } @@ -549,8 +567,22 @@ public class CalculatorResult extends AlignedTextView { @Override public void onDestroyActionMode(ActionMode mode) { + unhighlightResult(); mActionMode = null; } + + @Override + public void onGetContentRect(ActionMode mode, View view, Rect outRect) { + super.onGetContentRect(mode, view, outRect); + outRect.left += getPaddingLeft(); + outRect.top += getPaddingTop(); + outRect.right -= getPaddingRight(); + outRect.bottom -= getPaddingBottom(); + final int width = (int) Layout.getDesiredWidth(getText(), getPaint()); + if (width < outRect.width()) { + outRect.left = outRect.right - width; + } + } }; public boolean stopActionMode() { 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.ClipData; 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 @@ import android.widget.TextView; */ 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 @@ public class CalculatorText extends AlignedTextView implements View.OnLongClickL 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 class CalculatorText extends AlignedTextView implements View.OnLongClickL 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. |