diff --git a/FAQ.md b/FAQ.md index 9dfd806a4f..abdec33b78 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1004,7 +1004,7 @@ Possible causes are: * A firewall or router is blocking connections to the server * The host name or port number is invalid * The are problems with the internet connection -* The email server is refusing to accept connections +* The email server is refusing to accept (external) connections * The email server is refusing to accept a message, for example because it is too large or contains unacceptable links * There are too many connections to the server, see also the next question diff --git a/app/build.gradle b/app/build.gradle index 8ec69d6991..ccb88a4603 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -366,7 +366,7 @@ dependencies { // https://github.com/bugsnag/bugsnag-android implementation("com.bugsnag:bugsnag-android:$bugsnag_version") { - exclude group: "com.bugsnag", module: "bugsnag-plugin-android-anr" + //exclude group: "com.bugsnag", module: "bugsnag-plugin-android-anr" exclude group: "com.bugsnag", module: "bugsnag-plugin-android-ndk" } diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 036f6bec06..d62371f86a 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -3507,7 +3507,7 @@ public class AdapterMessage extends RecyclerView.Adapter sources = new ArrayList<>(); + List targets = new ArrayList<>(); + for (MessageTarget t : result) { + if (!sources.contains(t.sourceFolder.type)) + sources.add(t.sourceFolder.type); + if (!targets.contains(t.targetFolder.type)) + targets.add(t.targetFolder.type); + } + Drawable source = null; - Drawable target = null; - if (result.size() == 1) { - source = getResources().getDrawable(EntityFolder.getIcon(result.get(0).sourceFolder.type), null); - target = getResources().getDrawable(EntityFolder.getIcon(result.get(0).targetFolder.type), null); + if (sources.size() == 1) { + source = getResources().getDrawable(EntityFolder.getIcon(sources.get(0)), null); if (source != null) source.setBounds(0, 0, source.getIntrinsicWidth(), source.getIntrinsicHeight()); + } + + Drawable target = null; + if (targets.size() == 1) { + target = getResources().getDrawable(EntityFolder.getIcon(targets.get(0)), null); if (target != null) - target.setBounds(0, 0, target.getIntrinsicWidth(), source.getIntrinsicHeight()); + target.setBounds(0, 0, target.getIntrinsicWidth(), target.getIntrinsicHeight()); } tvSourceFolders.setCompoundDrawablesRelative(source, null, null, null); diff --git a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java index 6aee3fa46a..30f770a6aa 100644 --- a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java @@ -318,18 +318,22 @@ public class FragmentQuickSetup extends FragmentBase { throw ex; } catch (Throwable ex) { // Why not AuthenticationFailedException? - // Some providers refuse connection with an invalid username - if (!user.equals(username)) { - Log.w(ex); - user = username; - Log.i("Retry with user=" + user); - iservice.connect( - provider.imap.host, provider.imap.port, - EmailService.AUTH_TYPE_PASSWORD, null, - user, password, - null, null); - } else + // Some providers terminate the connection with an invalid username + if (user.equals(username)) throw ex; + else + try { + user = username; + Log.i("Retry with user=" + user); + iservice.connect( + provider.imap.host, provider.imap.port, + EmailService.AUTH_TYPE_PASSWORD, null, + user, password, + null, null); + } catch (Throwable ex1) { + Log.w(ex1); + throw ex; + } } folders = iservice.getFolders(); diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index 923b518a4b..513d42e869 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -155,6 +155,7 @@ public class Helper { static final String TEST_URI = "https://play.google.com/apps/testing/" + BuildConfig.APPLICATION_ID; static final String CROWDIN_URI = "https://crowdin.com/project/open-source-email"; static final String GRAVATAR_PRIVACY_URI = "https://meta.stackexchange.com/questions/44717/is-gravatar-a-privacy-risk"; + static final String LICENSE_URI = "https://www.gnu.org/licenses/gpl-3.0.html"; static final Pattern EMAIL_ADDRESS = Pattern.compile( diff --git a/app/src/main/java/eu/faircode/email/Log.java b/app/src/main/java/eu/faircode/email/Log.java index edac99b683..6ed10ca1d3 100644 --- a/app/src/main/java/eu/faircode/email/Log.java +++ b/app/src/main/java/eu/faircode/email/Log.java @@ -283,7 +283,7 @@ public class Log { config.setAutoTrackSessions(false); ErrorTypes etypes = new ErrorTypes(); - etypes.setAnrs(false); + etypes.setAnrs(BuildConfig.DEBUG); etypes.setNdkCrashes(false); config.setEnabledErrorTypes(etypes); diff --git a/app/src/main/java/eu/faircode/email/ServiceUI.java b/app/src/main/java/eu/faircode/email/ServiceUI.java index d98b8b1fd9..33a2ae0c85 100644 --- a/app/src/main/java/eu/faircode/email/ServiceUI.java +++ b/app/src/main/java/eu/faircode/email/ServiceUI.java @@ -579,6 +579,8 @@ public class ServiceUI extends IntentService { long now = new Date().getTime(); long interval = pollInterval * 60 * 1000L; long next = now + interval - now % interval + 30 * 1000L; + if (next < now + interval / 5) + next += interval; EntityLog.log(context, "Poll next=" + new Date(next)); diff --git a/app/src/main/res/layout/dialog_ask_move.xml b/app/src/main/res/layout/dialog_ask_move.xml index d9f1ddf1e8..5065fc922c 100644 --- a/app/src/main/res/layout/dialog_ask_move.xml +++ b/app/src/main/res/layout/dialog_ask_move.xml @@ -14,6 +14,7 @@ android:id="@+id/tvMessages" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:gravity="center" android:text="Messages" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:textColor="?android:attr/textColorPrimary" @@ -28,6 +29,7 @@ android:layout_marginTop="24dp" android:drawableStart="@drawable/baseline_inbox_24" android:drawablePadding="6dp" + android:gravity="center" android:text="Source folders" android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textColor="?android:attr/textColorPrimary" @@ -40,6 +42,7 @@ android:layout_width="48dp" android:layout_height="48dp" android:layout_marginTop="12dp" + android:gravity="center" android:tint="?android:attr/textColorSecondary" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -53,6 +56,7 @@ android:layout_marginTop="12dp" android:drawableStart="@drawable/baseline_archive_24" android:drawablePadding="6dp" + android:gravity="center" android:text="Target folders" android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textColor="?android:attr/textColorPrimary" @@ -65,6 +69,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" + android:gravity="center" android:text="@string/title_no_ask_again" android:textAppearance="@style/TextAppearance.AppCompat.Small" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/include_eula.xml b/app/src/main/res/layout/include_eula.xml index b1beb9bbe0..93480a5061 100644 --- a/app/src/main/res/layout/include_eula.xml +++ b/app/src/main/res/layout/include_eula.xml @@ -43,6 +43,7 @@ android:layout_marginTop="12dp" android:text="@string/app_eula" android:textAppearance="@style/TextAppearance.AppCompat.Small" + android:textIsSelectable="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvEulaTitle" /> @@ -53,7 +54,7 @@ android:layout_marginTop="12dp" android:text="@string/title_gplv3" android:textAppearance="@style/TextAppearance.AppCompat.Small" - android:textStyle="italic" + android:textColor="?android:attr/textColorLink" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvEula" />