summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Boehm <hboehm@google.com>2015-06-19 01:43:57 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-06-19 01:43:57 +0000
commit380f24f11d8b20575011c6153c71cbeac14b2395 (patch)
tree6f69ebfefda7b429490ddc9bc72ace95b17d0da7
parenta80460439c7562bfc71139cfde38d7998078d76b (diff)
parent7f83e36b7a1cb358b8dd44da842a3897b65bfdde (diff)
downloadandroid_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.xml1
-rw-r--r--src/com/android/calculator2/CalculatorResult.java34
-rw-r--r--src/com/android/calculator2/CalculatorText.java15
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.