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