mirror of
https://github.com/M66B/FairEmail.git
synced 2026-03-28 03:46:00 +01:00
Refactoring
This commit is contained in:
@@ -19,10 +19,21 @@ package eu.faircode.email;
|
||||
Copyright 2018-2022 by Marcel Bokhorst (M66B)
|
||||
*/
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Typeface;
|
||||
import android.text.Html;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
import android.text.style.RelativeSizeSpan;
|
||||
import android.text.style.StyleSpan;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.SubMenu;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.view.MenuCompat;
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.PrimaryKey;
|
||||
|
||||
@@ -30,6 +41,15 @@ import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.text.Collator;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.mail.Address;
|
||||
@@ -139,6 +159,134 @@ public class EntityAnswer implements Serializable {
|
||||
return text;
|
||||
}
|
||||
|
||||
static void fillMenu(Menu main, boolean compose, List<EntityAnswer> answers, Context context) {
|
||||
boolean grouped = BuildConfig.DEBUG;
|
||||
|
||||
List<EntityAnswer> favorites = new ArrayList<>();
|
||||
List<String> groups = new ArrayList<>();
|
||||
for (EntityAnswer answer : answers)
|
||||
if (compose && answer.favorite)
|
||||
favorites.add(answer);
|
||||
else if (answer.group != null && !groups.contains(answer.group))
|
||||
groups.add(answer.group);
|
||||
|
||||
Collator collator = Collator.getInstance(Locale.getDefault());
|
||||
collator.setStrength(Collator.SECONDARY); // Case insensitive, process accents etc
|
||||
Collections.sort(groups, collator);
|
||||
|
||||
Collections.sort(answers, new Comparator<EntityAnswer>() {
|
||||
@Override
|
||||
public int compare(EntityAnswer a1, EntityAnswer a2) {
|
||||
if (!grouped || a1.applied.equals(a2.applied))
|
||||
return collator.compare(a1.name, a2.name);
|
||||
else
|
||||
return -a1.applied.compareTo(a2.applied);
|
||||
}
|
||||
});
|
||||
|
||||
Collections.sort(favorites, new Comparator<EntityAnswer>() {
|
||||
@Override
|
||||
public int compare(EntityAnswer a1, EntityAnswer a2) {
|
||||
return collator.compare(a1.name, a2.name);
|
||||
}
|
||||
});
|
||||
|
||||
int order = 0;
|
||||
|
||||
Map<String, SubMenu> map = new HashMap<>();
|
||||
for (String group : groups)
|
||||
map.put(group, main.addSubMenu(Menu.NONE, order, order++, group));
|
||||
|
||||
NumberFormat NF = NumberFormat.getNumberInstance();
|
||||
for (EntityAnswer answer : answers) {
|
||||
if (compose && answer.favorite)
|
||||
continue;
|
||||
order++;
|
||||
|
||||
SpannableStringBuilder name = new SpannableStringBuilder(answer.name);
|
||||
if (grouped && answer.applied > 0) {
|
||||
name.append(" (").append(NF.format(answer.applied)).append(")");
|
||||
name.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_SMALL),
|
||||
answer.name.length() + 1, name.length(), 0);
|
||||
}
|
||||
|
||||
MenuItem item;
|
||||
if (answer.group == null)
|
||||
item = main.add(Menu.NONE, order, order++, name);
|
||||
else {
|
||||
SubMenu smenu = map.get(answer.group);
|
||||
item = smenu.add(answer.applied > 0 ? Menu.FIRST : Menu.NONE,
|
||||
smenu.size(), smenu.size() + 1, name);
|
||||
}
|
||||
item.setIntent(new Intent().putExtra("id", answer.id));
|
||||
}
|
||||
|
||||
if (compose && BuildConfig.DEBUG) {
|
||||
SubMenu profiles = main.addSubMenu(Menu.NONE, order, order++, "Profiles");
|
||||
for (EmailProvider p : EmailProvider.loadProfiles(context)) {
|
||||
SpannableStringBuilder ssb = new SpannableStringBuilderEx();
|
||||
int start;
|
||||
ssb.append("IMAP (account, receive)");
|
||||
|
||||
ssb.append(" host ");
|
||||
start = ssb.length();
|
||||
ssb.append(p.imap.host);
|
||||
ssb.setSpan(new StyleSpan(Typeface.BOLD),
|
||||
start, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
|
||||
ssb.append(" port ");
|
||||
start = ssb.length();
|
||||
ssb.append(Integer.toString(p.imap.port));
|
||||
ssb.setSpan(new StyleSpan(Typeface.BOLD),
|
||||
start, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
|
||||
ssb.append(" encryption ");
|
||||
start = ssb.length();
|
||||
ssb.append(p.imap.starttls ? "STARTTLS" : "SSL/TLS");
|
||||
ssb.setSpan(new StyleSpan(Typeface.BOLD),
|
||||
start, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
|
||||
ssb.append("\n\n");
|
||||
|
||||
ssb.append("SMTP (identity, send)");
|
||||
|
||||
ssb.append(" host ");
|
||||
start = ssb.length();
|
||||
ssb.append(p.smtp.host);
|
||||
ssb.setSpan(new StyleSpan(Typeface.BOLD),
|
||||
start, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
|
||||
ssb.append(" port ");
|
||||
start = ssb.length();
|
||||
ssb.append(Integer.toString(p.smtp.port));
|
||||
ssb.setSpan(new StyleSpan(Typeface.BOLD),
|
||||
start, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
|
||||
ssb.append(" encryption ");
|
||||
start = ssb.length();
|
||||
ssb.append(p.smtp.starttls ? "STARTTLS" : "SSL/TLS");
|
||||
ssb.setSpan(new StyleSpan(Typeface.BOLD),
|
||||
start, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
|
||||
ssb.append("\n\n");
|
||||
|
||||
if (!TextUtils.isEmpty(p.link))
|
||||
ssb.append(p.link).append("\n\n");
|
||||
|
||||
profiles.add(999, profiles.size(), profiles.size() + 1, p.name +
|
||||
(p.appPassword ? "+" : ""))
|
||||
.setIntent(new Intent().putExtra("config", ssb));
|
||||
}
|
||||
}
|
||||
|
||||
for (EntityAnswer answer : favorites)
|
||||
main.add(Menu.NONE, order, order++, answer.toString())
|
||||
.setIntent(new Intent().putExtra("id", answer.id));
|
||||
|
||||
if (grouped)
|
||||
MenuCompat.setGroupDividerEnabled(main, true);
|
||||
}
|
||||
|
||||
public JSONObject toJSON() throws JSONException {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("id", id);
|
||||
|
||||
Reference in New Issue
Block a user