remove unused CopyTextView

after removing the ability to select and copy text the transformation methods
provided by CopyTextView are no longer necessary.
This commit is contained in:
Daniel Gultsch 2020-12-08 07:08:56 +01:00
parent 7179d72f7e
commit 849968107e
3 changed files with 5 additions and 145 deletions

View file

@ -65,7 +65,6 @@ import eu.siacs.conversations.ui.util.AvatarWorkerTask;
import eu.siacs.conversations.ui.util.MyLinkify; import eu.siacs.conversations.ui.util.MyLinkify;
import eu.siacs.conversations.ui.util.ViewUtil; import eu.siacs.conversations.ui.util.ViewUtil;
import eu.siacs.conversations.ui.widget.ClickableMovementMethod; import eu.siacs.conversations.ui.widget.ClickableMovementMethod;
import eu.siacs.conversations.ui.widget.CopyTextView;
import eu.siacs.conversations.utils.CryptoHelper; import eu.siacs.conversations.utils.CryptoHelper;
import eu.siacs.conversations.utils.EmojiWrapper; import eu.siacs.conversations.utils.EmojiWrapper;
import eu.siacs.conversations.utils.Emoticons; import eu.siacs.conversations.utils.Emoticons;
@ -77,7 +76,7 @@ import eu.siacs.conversations.utils.UIHelper;
import eu.siacs.conversations.xmpp.Jid; import eu.siacs.conversations.xmpp.Jid;
import eu.siacs.conversations.xmpp.mam.MamReference; import eu.siacs.conversations.xmpp.mam.MamReference;
public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextView.CopyHandler { public class MessageAdapter extends ArrayAdapter<Message> {
public static final String DATE_SEPARATOR_BODY = "DATE_SEPARATOR"; public static final String DATE_SEPARATOR_BODY = "DATE_SEPARATOR";
private static final int SENT = 0; private static final int SENT = 0;
@ -671,9 +670,6 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
default: default:
throw new AssertionError("Unknown view type"); throw new AssertionError("Unknown view type");
} }
if (viewHolder.messageBody != null) {
viewHolder.messageBody.setCopyHandler(this);
}
view.setTag(viewHolder); view.setTag(viewHolder);
} else { } else {
viewHolder = (ViewHolder) view.getTag(); viewHolder = (ViewHolder) view.getTag();
@ -868,38 +864,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
private void promptOpenKeychainInstall(View view) { private void promptOpenKeychainInstall(View view) {
activity.showInstallPgpDialog(); activity.showInstallPgpDialog();
} }
private String transformText(CharSequence text, int start, int end, boolean forCopy) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
Object copySpan = new Object();
builder.setSpan(copySpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
DividerSpan[] dividerSpans = builder.getSpans(0, builder.length(), DividerSpan.class);
for (DividerSpan dividerSpan : dividerSpans) {
builder.replace(builder.getSpanStart(dividerSpan), builder.getSpanEnd(dividerSpan),
dividerSpan.isLarge() ? "\n\n" : "\n");
}
start = builder.getSpanStart(copySpan);
end = builder.getSpanEnd(copySpan);
if (start == -1 || end == -1) return "";
builder = new SpannableStringBuilder(builder, start, end);
if (forCopy) {
QuoteSpan[] quoteSpans = builder.getSpans(0, builder.length(), QuoteSpan.class);
for (QuoteSpan quoteSpan : quoteSpans) {
builder.insert(builder.getSpanStart(quoteSpan), "> ");
}
}
return builder.toString();
}
@Override
public String transformTextForCopy(CharSequence text, int start, int end) {
if (text instanceof Spanned) {
return transformText(text, start, end, true);
} else {
return text.toString().substring(start, end);
}
}
public FileBackend getFileBackend() { public FileBackend getFileBackend() {
return activity.xmppConnectionService.getFileBackend(); return activity.xmppConnectionService.getFileBackend();
} }
@ -969,56 +934,9 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
protected ImageView indicator; protected ImageView indicator;
protected ImageView indicatorReceived; protected ImageView indicatorReceived;
protected TextView time; protected TextView time;
protected CopyTextView messageBody; protected TextView messageBody;
protected ImageView contact_picture; protected ImageView contact_picture;
protected TextView status_message; protected TextView status_message;
protected TextView encryption; protected TextView encryption;
} }
private class MessageBodyActionModeCallback implements ActionMode.Callback {
private final TextView textView;
public MessageBodyActionModeCallback(TextView textView) {
this.textView = textView;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
if (onQuoteListener != null) {
int quoteResId = activity.getThemeResource(R.attr.icon_quote, R.drawable.ic_action_reply);
// 3rd item is placed after "copy" item
menu.add(0, android.R.id.button1, 3, R.string.quote).setIcon(quoteResId)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
}
return false;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if (item.getItemId() == android.R.id.button1) {
int start = textView.getSelectionStart();
int end = textView.getSelectionEnd();
if (end > start) {
String text = transformText(textView.getText(), start, end, false);
if (onQuoteListener != null) {
onQuoteListener.onQuote(text);
}
mode.finish();
}
return true;
}
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
}
} }

View file

@ -1,58 +0,0 @@
package eu.siacs.conversations.ui.widget;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.util.AttributeSet;
public class CopyTextView extends AppCompatTextView {
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);
}
public interface CopyHandler {
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) {
final 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));
}
}
}
}

View file

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <merge xmlns:android="http://schemas.android.com/apk/res/android">
<eu.siacs.conversations.ui.widget.CopyTextView <TextView
android:id="@+id/message_body" android:id="@+id/message_body"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:autoLink="web" android:autoLink="web"
android:longClickable="true" android:longClickable="false"
android:textAppearance="@style/TextAppearance.Conversations.Body1"/> android:textAppearance="@style/TextAppearance.Conversations.Body1"/>
<ImageView <ImageView