Highlight DSN headers, refactoring

pull/162/head
M66B 6 years ago
parent 0358cc2f0a
commit 2ce1b7fceb

@ -154,7 +154,7 @@
</activity> </activity>
<activity <activity
android:name=".ActivityEml" android:name=".ActivityEML"
android:exported="true" android:exported="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:launchMode="singleTop"> android:launchMode="singleTop">

@ -25,6 +25,7 @@ import android.content.Context;
import android.content.res.AssetFileDescriptor; import android.content.res.AssetFileDescriptor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.Spanned;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
@ -88,7 +89,9 @@ public class ActivityDSN extends ActivityBase {
int length; int length;
while ((length = is.read(buffer)) != -1) while ((length = is.read(buffer)) != -1)
bos.write(buffer, 0, length); bos.write(buffer, 0, length);
result.headers = MessageHelper.decodeMime(bos.toString(StandardCharsets.UTF_8.name()));
String headers = MessageHelper.decodeMime(bos.toString(StandardCharsets.UTF_8.name()));
result.headers = HtmlHelper.highlightHeaders(context, headers);
} }
return result; return result;
@ -111,6 +114,6 @@ public class ActivityDSN extends ActivityBase {
} }
private class Result { private class Result {
String headers; Spanned headers;
} }
} }

@ -26,9 +26,7 @@ import android.content.DialogInterface;
import android.content.res.AssetFileDescriptor; import android.content.res.AssetFileDescriptor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.text.Spanned; import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
@ -54,7 +52,7 @@ import javax.mail.Message;
import javax.mail.Session; import javax.mail.Session;
import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage;
public class ActivityEml extends ActivityBase { public class ActivityEML extends ActivityBase {
private Uri uri; private Uri uri;
@Override @Override
@ -125,21 +123,7 @@ public class ActivityEml extends ActivityBase {
result.cc = MessageHelper.formatAddresses(helper.getCc()); result.cc = MessageHelper.formatAddresses(helper.getCc());
result.bcc = MessageHelper.formatAddresses(helper.getBcc()); result.bcc = MessageHelper.formatAddresses(helper.getBcc());
result.subject = helper.getSubject(); result.subject = helper.getSubject();
result.headers = HtmlHelper.highlightHeaders(context, helper.getHeaders());
String headers = helper.getHeaders();
int colorAccent = Helper.resolveColor(context, R.attr.colorAccent);
SpannableStringBuilder ssb = new SpannableStringBuilder(headers);
int index = 0;
for (String line : headers.split("\n")) {
if (line.length() > 0 && !Character.isWhitespace(line.charAt(0))) {
int colon = line.indexOf(':');
if (colon > 0)
ssb.setSpan(new ForegroundColorSpan(colorAccent), index, index + colon, 0);
}
index += line.length() + 1;
}
result.headers = ssb;
MessageHelper.MessageParts parts = helper.getMessageParts(); MessageHelper.MessageParts parts = helper.getMessageParts();
@ -220,10 +204,10 @@ public class ActivityEml extends ActivityBase {
@Override @Override
protected void onExecuted(Bundle args, List<EntityAccount> accounts) { protected void onExecuted(Bundle args, List<EntityAccount> accounts) {
ArrayAdapter<EntityAccount> adapter = ArrayAdapter<EntityAccount> adapter =
new ArrayAdapter<>(ActivityEml.this, R.layout.spinner_item1, android.R.id.text1); new ArrayAdapter<>(ActivityEML.this, R.layout.spinner_item1, android.R.id.text1);
adapter.addAll(accounts); adapter.addAll(accounts);
new AlertDialog.Builder(ActivityEml.this) new AlertDialog.Builder(ActivityEML.this)
.setAdapter(adapter, new DialogInterface.OnClickListener() { .setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
@ -236,7 +220,7 @@ public class ActivityEml extends ActivityBase {
new SimpleTask<String>() { new SimpleTask<String>() {
@Override @Override
protected void onPreExecute(Bundle args) { protected void onPreExecute(Bundle args) {
ToastEx.makeText(ActivityEml.this, R.string.title_executing, Toast.LENGTH_LONG).show(); ToastEx.makeText(ActivityEML.this, R.string.title_executing, Toast.LENGTH_LONG).show();
} }
@Override @Override
@ -280,7 +264,7 @@ public class ActivityEml extends ActivityBase {
@Override @Override
protected void onExecuted(Bundle args, String name) { protected void onExecuted(Bundle args, String name) {
ToastEx.makeText(ActivityEml.this, name, Toast.LENGTH_LONG).show(); ToastEx.makeText(ActivityEML.this, name, Toast.LENGTH_LONG).show();
} }
@Override @Override
@ -290,7 +274,7 @@ public class ActivityEml extends ActivityBase {
else else
Helper.unexpectedError(getSupportFragmentManager(), ex); Helper.unexpectedError(getSupportFragmentManager(), ex);
} }
}.execute(ActivityEml.this, args, "eml:store"); }.execute(ActivityEML.this, args, "eml:store");
} }
}) })
.show(); .show();

@ -57,7 +57,6 @@ import android.text.format.DateUtils;
import android.text.method.ArrowKeyMovementMethod; import android.text.method.ArrowKeyMovementMethod;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.text.style.DynamicDrawableSpan; import android.text.style.DynamicDrawableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan; import android.text.style.ImageSpan;
import android.text.style.QuoteSpan; import android.text.style.QuoteSpan;
import android.text.style.URLSpan; import android.text.style.URLSpan;
@ -1024,20 +1023,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvKeywords.setText(TextUtils.join(" ", message.keywords)); tvKeywords.setText(TextUtils.join(" ", message.keywords));
// Headers // Headers
if (show_headers && message.headers != null) { if (show_headers && message.headers != null)
SpannableStringBuilder ssb = new SpannableStringBuilder(message.headers); tvHeaders.setText(HtmlHelper.highlightHeaders(context, message.headers));
int index = 0; else
for (String line : message.headers.split("\n")) {
if (line.length() > 0 && !Character.isWhitespace(line.charAt(0))) {
int colon = line.indexOf(':');
if (colon > 0)
ssb.setSpan(new ForegroundColorSpan(colorAccent), index, index + colon, 0);
}
index += line.length() + 1;
}
tvHeaders.setText(ssb);
} else
tvHeaders.setText(null); tvHeaders.setText(null);
// Attachments // Attachments

@ -30,8 +30,10 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.LevelListDrawable; import android.graphics.drawable.LevelListDrawable;
import android.os.Handler; import android.os.Handler;
import android.text.Html; import android.text.Html;
import android.text.SpannableStringBuilder;
import android.text.Spanned; import android.text.Spanned;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.Base64; import android.util.Base64;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.view.View; import android.view.View;
@ -732,6 +734,21 @@ public class HtmlHelper {
} }
} }
static Spanned highlightHeaders(Context context, String headers) {
int colorAccent = Helper.resolveColor(context, R.attr.colorAccent);
SpannableStringBuilder ssb = new SpannableStringBuilder(headers);
int index = 0;
for (String line : headers.split("\n")) {
if (line.length() > 0 && !Character.isWhitespace(line.charAt(0))) {
int colon = line.indexOf(':');
if (colon > 0)
ssb.setSpan(new ForegroundColorSpan(colorAccent), index, index + colon, 0);
}
index += line.length() + 1;
}
return ssb;
}
static Spanned fromHtml(@NonNull String html) { static Spanned fromHtml(@NonNull String html) {
return fromHtml(html, null, null); return fromHtml(html, null, null);
} }

@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ActivityEml"> tools:context=".ActivityEML">
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"

Loading…
Cancel
Save