Allow longpress only when valid copy/paste exists.
Bug: 30499529
Change-Id: I9ee0520b51e1643f0912bd8e01be7c6106fa48d6
diff --git a/src/com/android/calculator2/CalculatorText.java b/src/com/android/calculator2/CalculatorText.java
index de2a843..0ae9283 100644
--- a/src/com/android/calculator2/CalculatorText.java
+++ b/src/com/android/calculator2/CalculatorText.java
@@ -25,6 +25,7 @@
import android.os.Build;
import android.text.Layout;
import android.text.TextPaint;
+import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.ActionMode;
@@ -38,7 +39,8 @@
/**
* TextView adapted for Calculator display.
*/
-public class CalculatorText extends AlignedTextView implements MenuItem.OnMenuItemClickListener {
+public class CalculatorText extends AlignedTextView implements MenuItem.OnMenuItemClickListener,
+ ClipboardManager.OnPrimaryClipChangedListener {
public static final String TAG_ACTION_MODE = "ACTION_MODE";
@@ -49,6 +51,8 @@
private final float mMinimumTextSize;
private final float mStepTextSize;
+ private final ClipboardManager mClipboardManager;
+
private int mWidthConstraint = -1;
private ActionMode mActionMode;
private ActionMode.Callback mPasteActionModeCallback;
@@ -67,6 +71,8 @@
public CalculatorText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
+ mClipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
+
final TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.CalculatorText, defStyleAttr, 0);
mMaximumTextSize = a.getDimension(
@@ -112,6 +118,21 @@
}
@Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+
+ mClipboardManager.addPrimaryClipChangedListener(this);
+ onPrimaryClipChanged();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+
+ mClipboardManager.removePrimaryClipChangedListener(this);
+ }
+
+ @Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
@@ -332,6 +353,17 @@
return false;
}
+ @Override
+ public void onPrimaryClipChanged() {
+ final ClipData clip = mClipboardManager.getPrimaryClip();
+ if (clip == null || clip.getItemCount() == 0) {
+ setLongClickable(false);
+ return;
+ }
+ final CharSequence clipText = clip.getItemAt(0).coerceToText(getContext());
+ setLongClickable(!TextUtils.isEmpty(clipText));
+ }
+
public interface OnTextSizeChangeListener {
void onTextSizeChanged(TextView textView, float oldSize);
}