From 134e10c6914f31b607203d716dbbac4ee3533e76 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 4 Apr 2021 13:28:55 +0200 Subject: [PATCH] Use open link dialog for EML viewer --- .../java/eu/faircode/email/ActivityEML.java | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityEML.java b/app/src/main/java/eu/faircode/email/ActivityEML.java index 3fa5f95104..e6e5d83113 100644 --- a/app/src/main/java/eu/faircode/email/ActivityEML.java +++ b/app/src/main/java/eu/faircode/email/ActivityEML.java @@ -28,12 +28,16 @@ import android.content.SharedPreferences; import android.graphics.Typeface; import android.net.Uri; import android.os.Bundle; +import android.text.Layout; +import android.text.Spannable; import android.text.Spanned; import android.text.TextUtils; -import android.text.method.LinkMovementMethod; +import android.text.method.ArrowKeyMovementMethod; +import android.text.style.URLSpan; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.MotionEvent; import android.view.View; import android.widget.ArrayAdapter; import android.widget.TextView; @@ -115,7 +119,52 @@ public class ActivityEML extends ActivityBase { rvAttachment.setLayoutManager(llm); tvBody.setTypeface(monospaced ? Typeface.MONOSPACE : Typeface.DEFAULT); - tvBody.setMovementMethod(LinkMovementMethod.getInstance()); + tvBody.setMovementMethod(new ArrowKeyMovementMethod() { + @Override + public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_UP) { + int x = (int) event.getX(); + int y = (int) event.getY(); + + x -= widget.getTotalPaddingLeft(); + y -= widget.getTotalPaddingTop(); + + x += widget.getScrollX(); + y += widget.getScrollY(); + + Layout layout = widget.getLayout(); + int line = layout.getLineForVertical(y); + int off = layout.getOffsetForHorizontal(line, x); + + URLSpan[] link = buffer.getSpans(off, off, URLSpan.class); + if (link.length > 0) { + String url = link[0].getURL(); + Uri uri = Uri.parse(url); + if (uri.getScheme() == null) + uri = Uri.parse("https://" + url); + + int start = buffer.getSpanStart(link[0]); + int end = buffer.getSpanEnd(link[0]); + String title = (start < 0 || end < 0 || end <= start + ? null : buffer.subSequence(start, end).toString()); + if (url.equals(title)) + title = null; + + Bundle args = new Bundle(); + args.putParcelable("uri", uri); + args.putString("title", title); + + FragmentDialogOpenLink fragment = new FragmentDialogOpenLink(); + fragment.setArguments(args); + fragment.show(getSupportFragmentManager(), "open:link"); + + return true; + } + } + + return super.onTouchEvent(widget, buffer, event); + } + }); vSeparatorAttachments.setVisibility(View.GONE); grpReady.setVisibility(View.GONE);