Merge branch 'master' of github.com:M66B/FairEmail

This commit is contained in:
M66B 2020-08-20 08:52:38 +02:00
commit 8dd3927455
13 changed files with 70 additions and 22 deletions

2
FAQ.md
View File

@ -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

View File

@ -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"
}

View File

@ -3507,7 +3507,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
boolean current = properties.getValue(full ? "full" : "images", message.id);
boolean asked = properties.getValue(full ? "full_asked" : "images_asked", message.id);
if (current || asked) {
if (current) {
if (current && message.from != null) {
SharedPreferences.Editor editor = prefs.edit();
for (Address sender : message.from) {
String from = ((InternetAddress) sender).getAddress();

View File

@ -298,7 +298,8 @@ public class EntityMessage implements Serializable {
Element strong = document.createElement("strong");
strong.text(Helper.getString(context, l, R.string.title_received) + " ");
p.appendChild(strong);
p.appendText(DF.format(received));
if (received != null) // embedded messages
p.appendText(DF.format(received));
p.appendElement("br");
}
{

View File

@ -19,6 +19,7 @@ package eu.faircode.email;
Copyright 2018-2020 by Marcel Bokhorst (M66B)
*/
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
@ -44,10 +45,19 @@ public class FragmentAbout extends FragmentBase {
TextView tvVersion = view.findViewById(R.id.tvVersion);
TextView tvRelease = view.findViewById(R.id.tvRelease);
TextView tvGplV3 = view.findViewById(R.id.tvGplV3);
tvVersion.setText(getString(R.string.title_version, BuildConfig.VERSION_NAME));
tvRelease.setText(BuildConfig.RELEASE_NAME);
tvGplV3.setPaintFlags(tvGplV3.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvGplV3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Helper.view(getContext(), Uri.parse(Helper.LICENSE_URI), true);
}
});
return view;
}

View File

@ -20,11 +20,14 @@ package eu.faircode.email;
*/
import android.content.SharedPreferences;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -38,6 +41,15 @@ public class FragmentEula extends FragmentBase {
View view = inflater.inflate(R.layout.fragment_eula, container, false);
TextView tvGplV3 = view.findViewById(R.id.tvGplV3);
tvGplV3.setPaintFlags(tvGplV3.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvGplV3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Helper.view(getContext(), Uri.parse(Helper.LICENSE_URI), true);
}
});
Button btnAgree = view.findViewById(R.id.btnOk);
Button btnDisagree = view.findViewById(R.id.btnCancel);

View File

@ -7554,15 +7554,27 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
tvSourceFolders.setText(getDisplay(result, false));
tvTargetFolders.setText(getDisplay(result, true));
List<String> sources = new ArrayList<>();
List<String> 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);

View File

@ -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();

View File

@ -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(

View File

@ -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);

View File

@ -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));

View File

@ -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"

View File

@ -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" />
</androidx.constraintlayout.widget.ConstraintLayout>