66 lines
1.8 KiB
Java
66 lines
1.8 KiB
Java
|
package eu.siacs.conversations.ui.widget;
|
||
|
|
||
|
import android.annotation.TargetApi;
|
||
|
import android.content.ClipData;
|
||
|
import android.content.ClipboardManager;
|
||
|
import android.content.Context;
|
||
|
import android.os.Build;
|
||
|
import android.util.AttributeSet;
|
||
|
import android.widget.TextView;
|
||
|
|
||
|
public class CopyTextView extends TextView {
|
||
|
|
||
|
public CopyTextView(Context context) {
|
||
|
super(context);
|
||
|
}
|
||
|
|
||
|
public CopyTextView(Context context, AttributeSet attrs) {
|
||
|
super(context, attrs);
|
||
|
}
|
||
|
|
||
|
public CopyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||
|
super(context, attrs, defStyleAttr);
|
||
|
}
|
||
|
|
||
|
@SuppressWarnings("unused")
|
||
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||
|
public CopyTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||
|
}
|
||
|
|
||
|
public interface CopyHandler {
|
||
|
public String transformTextForCopy(CharSequence text, int start, int end);
|
||
|
}
|
||
|
|
||
|
private CopyHandler copyHandler;
|
||
|
|
||
|
public void setCopyHandler(CopyHandler copyHandler) {
|
||
|
this.copyHandler = copyHandler;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean onTextContextMenuItem(int id) {
|
||
|
CharSequence text = getText();
|
||
|
int min = 0;
|
||
|
int max = text.length();
|
||
|
if (isFocused()) {
|
||
|
final int selStart = getSelectionStart();
|
||
|
final int selEnd = getSelectionEnd();
|
||
|
min = Math.max(0, Math.min(selStart, selEnd));
|
||
|
max = Math.max(0, Math.max(selStart, selEnd));
|
||
|
}
|
||
|
String textForCopy = null;
|
||
|
if (id == android.R.id.copy && copyHandler != null) {
|
||
|
textForCopy = copyHandler.transformTextForCopy(getText(), min, max);
|
||
|
}
|
||
|
try {
|
||
|
return super.onTextContextMenuItem(id);
|
||
|
} finally {
|
||
|
if (textForCopy != null) {
|
||
|
ClipboardManager clipboard = (ClipboardManager) getContext().
|
||
|
getSystemService(Context.CLIPBOARD_SERVICE);
|
||
|
clipboard.setPrimaryClip(ClipData.newPlainText(null, textForCopy));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|