From 21c8c0ee5c61a6a92050a7ae7fa9db3f0fabcba4 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 16 Aug 2021 14:17:34 +0200 Subject: [PATCH] Added log type selection dialog --- .../java/eu/faircode/email/FragmentLogs.java | 52 ++++++++++++------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentLogs.java b/app/src/main/java/eu/faircode/email/FragmentLogs.java index f3916b5054..e7e2236855 100644 --- a/app/src/main/java/eu/faircode/email/FragmentLogs.java +++ b/app/src/main/java/eu/faircode/email/FragmentLogs.java @@ -19,6 +19,7 @@ package eu.faircode.email; Copyright 2018-2021 by Marcel Bokhorst (M66B) */ +import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; @@ -26,12 +27,12 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.constraintlayout.widget.Group; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.LinearLayoutManager; @@ -153,13 +154,6 @@ public class FragmentLogs extends FragmentBase { menu.findItem(R.id.menu_show).setVisible(all); menu.findItem(R.id.menu_clear).setVisible(all); - List types = getTypes(); - SubMenu smenu = menu.findItem(R.id.menu_show).getSubMenu(); - smenu.clear(); - for (EntityLog.Type type : EntityLog.Type.values()) - smenu.add(1, type.ordinal(), type.ordinal(), type.toString()) - .setCheckable(true).setChecked(types.contains(type)); - super.onPrepareOptionsMenu(menu); } @@ -176,10 +170,8 @@ public class FragmentLogs extends FragmentBase { item.setChecked(enabled); onMenuAutoScoll(enabled); return true; - } else if (item.getGroupId() == 1 && item.isCheckable()) { - boolean enabled = !item.isChecked(); - item.setChecked(enabled); - onMenuShowTypes(item.getOrder(), enabled); + } else if (itemId == R.id.menu_show) { + onMenuShow(); } else if (itemId == R.id.menu_clear) { onMenuClear(); return true; @@ -196,26 +188,46 @@ public class FragmentLogs extends FragmentBase { autoScroll = enabled; } - private void onMenuShowTypes(int ordinal, boolean enabled) { + private void onMenuShow() { + String[] titles = new String[EntityLog.Type.values().length]; + boolean[] states = new boolean[EntityLog.Type.values().length]; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - String name = EntityLog.Type.values()[ordinal].toString().toLowerCase(Locale.ROOT); - prefs.edit().putBoolean("show_log_" + name, enabled).apply(); - adapter.setTypes(getTypes()); + for (int i = 0; i < EntityLog.Type.values().length; i++) { + EntityLog.Type type = EntityLog.Type.values()[i]; + titles[i] = type.toString(); + String name = type.toString().toLowerCase(Locale.ROOT); + states[i] = prefs.getBoolean("show_log_" + name, true); + } + + new AlertDialog.Builder(getContext()) + .setTitle(R.string.title_unhide) + .setMultiChoiceItems(titles, states, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int pos, boolean checked) { + EntityLog.Type type = EntityLog.Type.values()[pos]; + prefs.edit().putBoolean(getKey(type), checked).apply(); + adapter.setTypes(getTypes()); + } + }) + .setPositiveButton(R.string.title_setup_done, null) + .show(); } private List getTypes() { List types = new ArrayList<>(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - for (EntityLog.Type type : EntityLog.Type.values()) { - String name = type.toString().toLowerCase(Locale.ROOT); - if (prefs.getBoolean("show_log_" + name, true)) + for (EntityLog.Type type : EntityLog.Type.values()) + if (prefs.getBoolean(getKey(type), true)) types.add(type); - } return types; } + private String getKey(EntityLog.Type type) { + return "show_log_" + type.toString().toLowerCase(Locale.ROOT); + } + private void onMenuClear() { EntityLog.clear(getContext()); }