diff --git a/app/src/main/java/eu/faircode/email/ActivityBilling.java b/app/src/main/java/eu/faircode/email/ActivityBilling.java
index 4a20fa7dbf..f5ef40e80b 100644
--- a/app/src/main/java/eu/faircode/email/ActivityBilling.java
+++ b/app/src/main/java/eu/faircode/email/ActivityBilling.java
@@ -188,10 +188,10 @@ abstract class ActivityBilling extends ActivityBase implements PurchasesUpdatedL
.putBoolean("play_store", false)
.apply();
Log.i("IAB response valid");
- Toast.makeText(this, R.string.title_pro_valid, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(this, R.string.title_pro_valid, Toast.LENGTH_LONG).show();
} else {
Log.i("IAB response invalid");
- Toast.makeText(this, R.string.title_pro_invalid, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(this, R.string.title_pro_invalid, Toast.LENGTH_LONG).show();
}
} catch (NoSuchAlgorithmException ex) {
Log.e(ex);
diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java
index 325760b115..6199a50095 100644
--- a/app/src/main/java/eu/faircode/email/ActivitySetup.java
+++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java
@@ -377,7 +377,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
Helper.unexpectedError(getSupportFragmentManager(), ex);
}
} else
- Toast.makeText(this, R.string.title_pro_feature, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(this, R.string.title_pro_feature, Toast.LENGTH_LONG).show();
}
private void onMenuImport() {
@@ -425,7 +425,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
if (pro)
prefs.edit().putBoolean("biometrics", !biometrics).apply();
- Toast.makeText(ActivitySetup.this,
+ ToastEx.makeText(ActivitySetup.this,
pro ? R.string.title_setup_done : R.string.title_pro_feature,
Toast.LENGTH_LONG).show();
}
@@ -619,13 +619,13 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
@Override
protected void onExecuted(Bundle args, Void data) {
- Toast.makeText(ActivitySetup.this, R.string.title_setup_exported, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(ActivitySetup.this, R.string.title_setup_exported, Toast.LENGTH_LONG).show();
}
@Override
protected void onException(Bundle args, Throwable ex) {
if (ex instanceof IllegalArgumentException)
- Toast.makeText(ActivitySetup.this, ex.getMessage(), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(ActivitySetup.this, ex.getMessage(), Toast.LENGTH_LONG).show();
else
Helper.unexpectedError(getSupportFragmentManager(), ex);
}
@@ -895,15 +895,15 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
@Override
protected void onExecuted(Bundle args, Void data) {
- Toast.makeText(ActivitySetup.this, R.string.title_setup_imported, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(ActivitySetup.this, R.string.title_setup_imported, Toast.LENGTH_LONG).show();
}
@Override
protected void onException(Bundle args, Throwable ex) {
if (ex.getCause() instanceof BadPaddingException)
- Toast.makeText(ActivitySetup.this, R.string.title_setup_password_invalid, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(ActivitySetup.this, R.string.title_setup_password_invalid, Toast.LENGTH_LONG).show();
else if (ex instanceof IllegalArgumentException)
- Toast.makeText(ActivitySetup.this, ex.getMessage(), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(ActivitySetup.this, ex.getMessage(), Toast.LENGTH_LONG).show();
else
Helper.unexpectedError(getSupportFragmentManager(), ex);
}
@@ -1055,7 +1055,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
String password2 = etPassword2.getEditText().getText().toString();
if (!BuildConfig.DEBUG && TextUtils.isEmpty(password1))
- Toast.makeText(getContext(), R.string.title_setup_password_missing, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(getContext(), R.string.title_setup_password_missing, Toast.LENGTH_LONG).show();
else {
if (!export || password1.equals(password2)) {
((ActivitySetup) getActivity()).password = password1;
@@ -1064,7 +1064,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
export ? getIntentExport() : getIntentImport()),
export ? REQUEST_EXPORT : REQUEST_IMPORT);
} else
- Toast.makeText(getContext(), R.string.title_setup_password_different, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(getContext(), R.string.title_setup_password_different, Toast.LENGTH_LONG).show();
}
}
})
diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java
index b72e29197e..711425abfa 100644
--- a/app/src/main/java/eu/faircode/email/ActivityView.java
+++ b/app/src/main/java/eu/faircode/email/ActivityView.java
@@ -532,7 +532,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
super.onBackPressed();
else {
exit = true;
- Toast.makeText(this, R.string.app_exit, Toast.LENGTH_SHORT).show();
+ ToastEx.makeText(this, R.string.app_exit, Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
@@ -616,7 +616,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
@Override
protected void onException(Bundle args, Throwable ex) {
- Toast.makeText(ActivityView.this,
+ ToastEx.makeText(ActivityView.this,
Helper.formatThrowable(ex, false), Toast.LENGTH_LONG).show();
}
}.execute(this, new Bundle(), "crash:log");
@@ -711,7 +711,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
boolean always = args.getBoolean("always");
if (info == null) {
if (always)
- Toast.makeText(ActivityView.this, BuildConfig.VERSION_NAME, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(ActivityView.this, BuildConfig.VERSION_NAME, Toast.LENGTH_LONG).show();
return;
}
@@ -740,7 +740,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
protected void onException(Bundle args, Throwable ex) {
if (args.getBoolean("always"))
if (ex instanceof IllegalArgumentException || ex instanceof IOException)
- Toast.makeText(ActivityView.this, ex.getMessage(), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(ActivityView.this, ex.getMessage(), Toast.LENGTH_LONG).show();
else
Helper.unexpectedError(getSupportFragmentManager(), ex);
}
@@ -887,9 +887,9 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
@Override
protected void onException(Bundle args, Throwable ex) {
if (ex instanceof IllegalArgumentException)
- Toast.makeText(ActivityView.this, ex.getMessage(), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(ActivityView.this, ex.getMessage(), Toast.LENGTH_LONG).show();
else
- Toast.makeText(ActivityView.this, ex.toString(), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(ActivityView.this, ex.toString(), Toast.LENGTH_LONG).show();
}
}.execute(this, new Bundle(), "debug:info");
diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java
index a03f0cbc6d..a87362008f 100644
--- a/app/src/main/java/eu/faircode/email/FragmentAccount.java
+++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java
@@ -1290,7 +1290,7 @@ public class FragmentAccount extends FragmentBase {
Bundle args = data.getBundleExtra("args");
setColor(args.getInt("color"));
} else
- Toast.makeText(getContext(), R.string.title_pro_feature, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(getContext(), R.string.title_pro_feature, Toast.LENGTH_LONG).show();
}
break;
case REQUEST_SAVE:
diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java
index 546b2c644a..9f79c8acd0 100644
--- a/app/src/main/java/eu/faircode/email/FragmentCompose.java
+++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java
@@ -2609,7 +2609,7 @@ public class FragmentCompose extends FragmentBase {
Handler handler = new Handler(context.getMainLooper());
handler.post(new Runnable() {
public void run() {
- Toast.makeText(context, R.string.title_draft_deleted, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(context, R.string.title_draft_deleted, Toast.LENGTH_LONG).show();
}
});
}
@@ -2623,7 +2623,7 @@ public class FragmentCompose extends FragmentBase {
Handler handler = new Handler(context.getMainLooper());
handler.post(new Runnable() {
public void run() {
- Toast.makeText(context, R.string.title_draft_saved, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(context, R.string.title_draft_saved, Toast.LENGTH_LONG).show();
}
});
@@ -2684,7 +2684,7 @@ public class FragmentCompose extends FragmentBase {
Handler handler = new Handler(context.getMainLooper());
handler.post(new Runnable() {
public void run() {
- Toast.makeText(context, feedback, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(context, feedback, Toast.LENGTH_LONG).show();
}
});
}
diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java
index 631036b509..c06259aca6 100644
--- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java
+++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java
@@ -1032,7 +1032,7 @@ public class FragmentIdentity extends FragmentBase {
Bundle args = data.getBundleExtra("args");
setColor(args.getInt("color"));
} else
- Toast.makeText(getContext(), R.string.title_pro_feature, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(getContext(), R.string.title_pro_feature, Toast.LENGTH_LONG).show();
}
break;
case REQUEST_SAVE:
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
index edb3ba6cec..5d17ceaf94 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
@@ -271,7 +271,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
@Override
protected void onExecuted(Bundle args, Void data) {
- Toast.makeText(getContext(), R.string.title_setup_done, Toast.LENGTH_LONG).show();
+ ToastEx.makeText(getContext(), R.string.title_setup_done, Toast.LENGTH_LONG).show();
}
@Override
diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java
index 04388c59b0..84363e6576 100644
--- a/app/src/main/java/eu/faircode/email/Helper.java
+++ b/app/src/main/java/eu/faircode/email/Helper.java
@@ -218,10 +218,10 @@ public class Helper {
customTabsIntent.launchUrl(context, uri);
} catch (ActivityNotFoundException ex) {
Log.w(ex);
- Toast.makeText(context, context.getString(R.string.title_no_viewer, uri.toString()), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(context, context.getString(R.string.title_no_viewer, uri.toString()), Toast.LENGTH_LONG).show();
} catch (Throwable ex) {
Log.e(ex);
- Toast.makeText(context, Helper.formatThrowable(ex, false), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(context, Helper.formatThrowable(ex, false), Toast.LENGTH_LONG).show();
}
}
}
@@ -489,9 +489,9 @@ public class Helper {
@Override
protected void onException(Bundle args, Throwable ex) {
if (ex instanceof IllegalArgumentException)
- Toast.makeText(context, ex.getMessage(), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(context, ex.getMessage(), Toast.LENGTH_LONG).show();
else
- Toast.makeText(context, ex.toString(), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(context, ex.toString(), Toast.LENGTH_LONG).show();
}
}.execute(context, getActivity(), new Bundle(), "error:unexpected");
}
@@ -722,7 +722,7 @@ public class Helper {
errorCode == BiometricPrompt.ERROR_USER_CANCELED)
cancelled.run();
else
- Toast.makeText(activity,
+ ToastEx.makeText(activity,
errString + " (" + errorCode + ")",
Toast.LENGTH_LONG).show();
}
@@ -751,7 +751,7 @@ public class Helper {
handler.post(new Runnable() {
@Override
public void run() {
- Toast.makeText(activity,
+ ToastEx.makeText(activity,
R.string.title_unexpected_error,
Toast.LENGTH_LONG).show();
cancelled.run();
diff --git a/app/src/main/java/eu/faircode/email/Shortcuts.java b/app/src/main/java/eu/faircode/email/Shortcuts.java
index dcb15089a7..ea008981c2 100644
--- a/app/src/main/java/eu/faircode/email/Shortcuts.java
+++ b/app/src/main/java/eu/faircode/email/Shortcuts.java
@@ -100,7 +100,7 @@ public class Shortcuts {
@Override
protected void onException(Bundle args, Throwable ex) {
- Toast.makeText(context, Helper.formatThrowable(ex, false), Toast.LENGTH_LONG).show();
+ ToastEx.makeText(context, Helper.formatThrowable(ex, false), Toast.LENGTH_LONG).show();
}
}.execute(context, owner, new Bundle(), "shortcuts:update");
}
diff --git a/app/src/main/java/eu/faircode/email/ToastEx.java b/app/src/main/java/eu/faircode/email/ToastEx.java
new file mode 100644
index 0000000000..f3b5b6ab29
--- /dev/null
+++ b/app/src/main/java/eu/faircode/email/ToastEx.java
@@ -0,0 +1,25 @@
+package eu.faircode.email;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
+
+public class ToastEx {
+ public static Toast makeText(Context context, int resId, int duration) throws Resources.NotFoundException {
+ return makeText(context, context.getText(resId), duration);
+ }
+
+ public static Toast makeText(Context context, CharSequence text, int duration) {
+ Toast toast = new Toast(context);
+ LayoutInflater inflater = LayoutInflater.from(context);
+ View view = inflater.inflate(R.layout.toast, null);
+ TextView tv = view.findViewById(android.R.id.message);
+ tv.setText(text);
+ toast.setView(view);
+ toast.setDuration(duration);
+ return toast;
+ }
+}
diff --git a/app/src/main/res/drawable/toast_background.xml b/app/src/main/res/drawable/toast_background.xml
new file mode 100644
index 0000000000..f573ff9d95
--- /dev/null
+++ b/app/src/main/res/drawable/toast_background.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/toast.xml b/app/src/main/res/layout/toast.xml
new file mode 100644
index 0000000000..c033184039
--- /dev/null
+++ b/app/src/main/res/layout/toast.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
\ No newline at end of file