diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index d513812e37..0878e46e13 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -2694,12 +2694,14 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. snackbar.show(); } else if (ex instanceof IllegalArgumentException) Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); - else - new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) - .setMessage(Helper.formatThrowable(ex, false)) - .setPositiveButton(android.R.string.cancel, null) - .create() - .show(); + else { + Bundle args = new Bundle(); + args.putString("error", Helper.formatThrowable(ex, false)); + + FragmentDialogError fragment = new FragmentDialogError(); + fragment.setArguments(args); + fragment.show(getFragmentManager(), "boundary:error"); + } } }; @@ -4359,4 +4361,17 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. .create(); } } + + public static class FragmentDialogError extends DialogFragment { + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + String error = getArguments().getString("error"); + + return new AlertDialog.Builder(getContext()) + .setMessage(error) + .setPositiveButton(android.R.string.cancel, null) + .create(); + } + } } diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java index 8302a34859..eefd562419 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java @@ -19,6 +19,7 @@ package eu.faircode.email; Copyright 2018-2019 by Marcel Bokhorst (M66B) */ +import android.app.Dialog; import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; @@ -35,7 +36,9 @@ import android.widget.Spinner; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.SwitchCompat; +import androidx.fragment.app.DialogFragment; import androidx.preference.PreferenceManager; public class FragmentOptionsDisplay extends FragmentBase implements SharedPreferences.OnSharedPreferenceChangeListener { @@ -97,7 +100,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer btnTheme.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - onSelectTheme(); + new FragmentDialogTheme().show(getFragmentManager(), "setup:theme"); } }); @@ -256,54 +259,6 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer editor.apply(); } - private void onSelectTheme() { - View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_theme, null); - final RadioGroup rgTheme = dview.findViewById(R.id.rgTheme); - - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - String theme = prefs.getString("theme", "light"); - - switch (theme) { - case "dark": - rgTheme.check(R.id.rbThemeDark); - break; - case "black": - rgTheme.check(R.id.rbThemeBlack); - break; - case "system": - rgTheme.check(R.id.rbThemeSystem); - break; - default: - rgTheme.check(R.id.rbThemeLight); - } - - rgTheme.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - getActivity().getIntent().putExtra("tab", "display"); - - switch (checkedId) { - case R.id.rbThemeLight: - prefs.edit().putString("theme", "light").apply(); - break; - case R.id.rbThemeDark: - prefs.edit().putString("theme", "dark").apply(); - break; - case R.id.rbThemeBlack: - prefs.edit().putString("theme", "black").apply(); - break; - case R.id.rbThemeSystem: - prefs.edit().putString("theme", "system").apply(); - break; - } - } - }); - - new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) - .setView(dview) - .show(); - } - private void setOptions() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); @@ -332,4 +287,56 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer swImages.setChecked(prefs.getBoolean("autoimages", false)); swActionbar.setChecked(prefs.getBoolean("actionbar", true)); } + + public static class FragmentDialogTheme extends DialogFragment { + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_theme, null); + final RadioGroup rgTheme = dview.findViewById(R.id.rgTheme); + + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + String theme = prefs.getString("theme", "light"); + + switch (theme) { + case "dark": + rgTheme.check(R.id.rbThemeDark); + break; + case "black": + rgTheme.check(R.id.rbThemeBlack); + break; + case "system": + rgTheme.check(R.id.rbThemeSystem); + break; + default: + rgTheme.check(R.id.rbThemeLight); + } + + rgTheme.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + getActivity().getIntent().putExtra("tab", "display"); + + switch (checkedId) { + case R.id.rbThemeLight: + prefs.edit().putString("theme", "light").apply(); + break; + case R.id.rbThemeDark: + prefs.edit().putString("theme", "dark").apply(); + break; + case R.id.rbThemeBlack: + prefs.edit().putString("theme", "black").apply(); + break; + case R.id.rbThemeSystem: + prefs.edit().putString("theme", "system").apply(); + break; + } + } + }); + + return new AlertDialog.Builder(getContext()) + .setView(dview) + .create(); + } + } } diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index b67e5f3626..1e2e88972f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -21,6 +21,7 @@ package eu.faircode.email; import android.Manifest; import android.annotation.TargetApi; +import android.app.Dialog; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; @@ -42,7 +43,9 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; +import androidx.fragment.app.DialogFragment; import androidx.lifecycle.Observer; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.preference.PreferenceManager; @@ -161,20 +164,7 @@ public class FragmentSetup extends FragmentBase { btnDoze.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) - .setMessage(R.string.title_setup_doze_instructions) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - try { - startActivity(new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)); - } catch (Throwable ex) { - Log.e(ex); - } - } - }) - .create() - .show(); + new FragmentDialogDoze().show(getFragmentManager(), "setup:doze"); } }); @@ -357,4 +347,24 @@ public class FragmentSetup extends FragmentBase { tvPermissionsDone.setCompoundDrawablesWithIntrinsicBounds(has ? check : null, null, null, null); btnPermissions.setEnabled(!has); } + + public static class FragmentDialogDoze extends DialogFragment { + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + return new AlertDialog.Builder(getContext()) + .setMessage(R.string.title_setup_doze_instructions) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + try { + startActivity(new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)); + } catch (Throwable ex) { + Log.e(ex); + } + } + }) + .create(); + } + } }