diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 81a8b73961..6070ceae30 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -54,6 +54,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.PopupMenu; import androidx.constraintlayout.widget.Group; import androidx.core.app.NotificationCompat; import androidx.core.widget.NestedScrollView; @@ -91,6 +92,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB private String startup; private boolean nav_pinned; private boolean nav_expanded; + private boolean nav_options; private int colorDrawerScrim; private int layoutId; @@ -106,6 +108,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB private ImageButton ibExpanderNav; private ImageButton ibPin; private ImageButton ibSettings; + private View vSeparatorOptions; private ImageButton ibExpanderAccount; private RecyclerView rvAccount; private ImageButton ibExpanderUnified; @@ -187,6 +190,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB startup = prefs.getString("startup", "unified"); nav_pinned = getDrawerPinned(); nav_expanded = prefs.getBoolean("nav_expanded", true); + nav_options = prefs.getBoolean("nav_options", true); Configuration config = getResources().getConfiguration(); boolean portrait2 = prefs.getBoolean("portrait2", false); @@ -273,6 +277,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB ibExpanderNav = drawerContainer.findViewById(R.id.ibExpanderNav); ibPin = drawerContainer.findViewById(R.id.ibPin); ibSettings = drawerContainer.findViewById(R.id.ibSettings); + vSeparatorOptions = drawerContainer.findViewById(R.id.vSeparatorOptions); grpOptions = drawerContainer.findViewById(R.id.grpOptions); ibExpanderAccount = drawerContainer.findViewById(R.id.ibExpanderAccount); rvAccount = drawerContainer.findViewById(R.id.rvAccount); @@ -344,15 +349,45 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB ibSettings.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent privacy = new Intent(v.getContext(), ActivitySetup.class) - .setAction("display") - .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .putExtra("tab", "display"); - v.getContext().startActivity(privacy); + PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(ActivityView.this, owner, ibSettings); + popupMenu.inflate(R.menu.popup_nav); + popupMenu.insertIcons(ActivityView.this); + + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + int itemId = item.getItemId(); + if (itemId == R.id.menu_hide) { + View dview = LayoutInflater.from(ActivityView.this).inflate(R.layout.dialog_nav_options, null); + new AlertDialog.Builder(ActivityView.this) + .setView(dview) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + prefs.edit().putBoolean("nav_options", false).apply(); + } + }) + .setNegativeButton(android.R.string.cancel, null) + .show(); + return true; + } else if (itemId != R.id.menu_settings) { + String tab = FragmentOptions.TAB_LABELS.get(item.getOrder()); + startActivity(new Intent(ActivityView.this, ActivitySetup.class) + .setAction(tab) + .putExtra("tab", tab)); + return true; + } + return false; + } + }); + + popupMenu.show(); } }); - grpOptions.setVisibility(nav_expanded ? View.VISIBLE : View.GONE); + ibExpanderNav.setVisibility(nav_options ? View.VISIBLE : View.GONE); + grpOptions.setVisibility(nav_expanded && nav_options ? View.VISIBLE : View.GONE); + vSeparatorOptions.setVisibility(nav_options ? View.VISIBLE : View.GONE); // Accounts rvAccount.setLayoutManager(new LinearLayoutManager(this)); @@ -789,6 +824,17 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB drawerToggle.onConfigurationChanged(newConfig); } + @Override + public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { + super.onSharedPreferenceChanged(prefs, key); + if ("nav_options".equals(key)) { + nav_options = prefs.getBoolean(key, true); + ibExpanderNav.setVisibility(nav_options ? View.VISIBLE : View.GONE); + grpOptions.setVisibility(nav_expanded && nav_options ? View.VISIBLE : View.GONE); + vSeparatorOptions.setVisibility(nav_options ? View.VISIBLE : View.GONE); + } + } + private void setupDrawer() { if (nav_pinned) { drawerLayout.setScrimColor(Color.TRANSPARENT); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index e922c05dab..ead0ada756 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -59,6 +59,10 @@ import androidx.viewpager.widget.ViewPager; import com.google.android.material.tabs.TabLayout; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + public class FragmentOptions extends FragmentBase { private ViewPager pager; private PagerAdapter adapter; @@ -103,6 +107,19 @@ public class FragmentOptions extends FragmentBase { R.drawable.twotone_more_24 }; + static final List TAB_LABELS = Collections.unmodifiableList(Arrays.asList( + "main", + "sync", + "send", + "connection", + "display", + "behavior", + "privacy", + "encryption", + "notifications", + "misc" + )); + static String[] OPTIONS_RESTART = new String[]{ "first", "app_support", "notify_archive", "message_swipe", "message_select", "folder_actions", "folder_sync", "subscriptions", @@ -212,17 +229,12 @@ public class FragmentOptions extends FragmentBase { } String tab = getActivity().getIntent().getStringExtra("tab"); - if ("connection".equals(tab)) - pager.setCurrentItem(3); - else if ("display".equals(tab)) - pager.setCurrentItem(4); - else if ("privacy".equals(tab)) - pager.setCurrentItem(6); - else if ("encryption".equals(tab)) - pager.setCurrentItem(7); - else if ("misc".equals(tab)) - pager.setCurrentItem(9); - getActivity().getIntent().removeExtra("tab"); + if (!TextUtils.isEmpty(tab)) { + int index = TAB_LABELS.indexOf(tab); + if (index >= 0) + pager.setCurrentItem(index); + getActivity().getIntent().removeExtra("tab"); + } } @Override diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java index a57fc238e7..721c2b5045 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java @@ -69,6 +69,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer private SwitchCompat swPortrait2; private SwitchCompat swPortrait2c; private SwitchCompat swLandscape; + private SwitchCompat swNavOptions; private SwitchCompat swNavMessageCount; private SwitchCompat swThreading; @@ -154,7 +155,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer private final static String[] RESET_OPTIONS = new String[]{ "theme", "startup", "cards", "beige", "tabular_card_bg", "shadow_unread", "date", "date_bold", - "portrait2", "portrait2c", "landscape", "nav_count", "navbar_colorize", + "portrait2", "portrait2c", "landscape", "nav_options", "nav_count", "navbar_colorize", "threading", "threading_unread", "indentation", "seekbar", "actionbar", "actionbar_color", "highlight_unread", "highlight_color", "color_stripe", "avatars", "bimi", "gravatars", "favicons", "generated_icons", "identicons", "circular", "saturation", "brightness", "threshold", @@ -191,6 +192,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer swPortrait2 = view.findViewById(R.id.swPortrait2); swPortrait2c = view.findViewById(R.id.swPortrait2c); swLandscape = view.findViewById(R.id.swLandscape); + swNavOptions = view.findViewById(R.id.swNavOptions); swNavMessageCount = view.findViewById(R.id.swNavMessageCount); swNavBarColorize = view.findViewById(R.id.swNavBarColorize); @@ -368,6 +370,13 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer } }); + swNavOptions.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("nav_options", checked).apply(); + } + }); + swNavMessageCount.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -1025,6 +1034,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer swPortrait2.setChecked(prefs.getBoolean("portrait2", false)); swPortrait2c.setChecked(prefs.getBoolean("portrait2c", false) && !swPortrait2.isChecked()); swLandscape.setChecked(prefs.getBoolean("landscape", true)); + swNavOptions.setChecked(prefs.getBoolean("nav_options", true)); swNavMessageCount.setChecked(prefs.getBoolean("nav_count", false)); swNavBarColorize.setChecked(prefs.getBoolean("navbar_colorize", false)); diff --git a/app/src/main/res/layout/dialog_nav_options.xml b/app/src/main/res/layout/dialog_nav_options.xml new file mode 100644 index 0000000000..469a94baac --- /dev/null +++ b/app/src/main/res/layout/dialog_nav_options.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_options_display.xml b/app/src/main/res/layout/fragment_options_display.xml index 03c0a82c26..585320f171 100644 --- a/app/src/main/res/layout/fragment_options_display.xml +++ b/app/src/main/res/layout/fragment_options_display.xml @@ -310,6 +310,17 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swLandscape" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3a6d70867d..4ec777540e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -400,7 +400,9 @@ Landscape mode Use two rows Use two columns - Show navigation menu by default + Show navigation menu options + Hide navigation menu options? + You can enable the options again in the display settings Show number of locally stored messages in the navigation menu Show on start screen Use card style instead of tabular style