diff --git a/CHANGELOG.md b/CHANGELOG.md index 137dc11dbe..ef7a730075 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ ### Next version +* Added collapsing of navigation menu folders * Added theme option for default light original message view * Unified color based on account folder colors diff --git a/app/build.gradle b/app/build.gradle index 9e64ee8b2e..3c0e45d87a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'kotlin-android' apply plugin: 'de.undercouch.download' def getVersionCode = { -> return 1731 } -def getRevision = { -> "\"a\"" } +def getRevision = { -> "\"e\"" } def getReleaseName = { -> return "\"Yaverlandia\"" } // https://en.wikipedia.org/wiki/List_of_dinosaur_genera diff --git a/app/src/main/assets/CHANGELOG.md b/app/src/main/assets/CHANGELOG.md index 137dc11dbe..ef7a730075 100644 --- a/app/src/main/assets/CHANGELOG.md +++ b/app/src/main/assets/CHANGELOG.md @@ -6,6 +6,7 @@ ### Next version +* Added collapsing of navigation menu folders * Added theme option for default light original message view * Unified color based on account folder colors diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index bf9e762d16..5bae31d455 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -427,13 +427,30 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB public void onClick(View v) { boolean nav_account = prefs.getBoolean("nav_account", true); boolean nav_folder = prefs.getBoolean("nav_folder", true); - nav_account = !(nav_account || nav_folder); + boolean nav_quick = prefs.getBoolean("nav_quick", true); + boolean expanded = (nav_account || nav_folder); + + if (expanded && nav_quick && adapterNavAccount.hasFolders()) + nav_quick = false; + else { + expanded = !expanded; + if (expanded) + nav_quick = true; + } + prefs.edit() - .putBoolean("nav_account", nav_account) - .putBoolean("nav_folder", false) + .putBoolean("nav_account", expanded) + .putBoolean("nav_folder", expanded) + .putBoolean("nav_quick", nav_quick) .apply(); - ibExpanderAccount.setImageLevel(nav_account ? 0 /* less */ : 1 /* more */); - rvAccount.setVisibility(nav_account ? View.VISIBLE : View.GONE); + + adapterNavAccount.setFolders(nav_quick); + + if (expanded && nav_quick && adapterNavAccount.hasFolders()) + ibExpanderAccount.setImageLevel(2 /* unfold less */); + else + ibExpanderAccount.setImageLevel(expanded ? 0 /* less */ : 1 /* more */); + rvAccount.setVisibility(expanded ? View.VISIBLE : View.GONE); } }); @@ -736,13 +753,25 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB // Live data DB db = DB.getInstance(this); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); db.account().liveAccountFolder().observe(owner, new Observer>() { @Override public void onChanged(@Nullable List accounts) { if (accounts == null) accounts = new ArrayList<>(); - adapterNavAccount.set(accounts, nav_expanded); + + boolean nav_account = prefs.getBoolean("nav_account", true); + boolean nav_folder = prefs.getBoolean("nav_folder", true); + boolean nav_quick = prefs.getBoolean("nav_quick", true); + boolean expanded = (nav_account || nav_folder); + + adapterNavAccount.set(accounts, nav_expanded, nav_quick); + + if (expanded && nav_quick && adapterNavAccount.hasFolders()) + ibExpanderAccount.setImageLevel(2 /* unfold less */); + else + ibExpanderAccount.setImageLevel(expanded ? 0 /* less */ : 1 /* more */); } }); diff --git a/app/src/main/java/eu/faircode/email/AdapterNavAccountFolder.java b/app/src/main/java/eu/faircode/email/AdapterNavAccountFolder.java index 13fac655f1..838bc06cae 100644 --- a/app/src/main/java/eu/faircode/email/AdapterNavAccountFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterNavAccountFolder.java @@ -65,6 +65,8 @@ public class AdapterNavAccountFolder extends RecyclerView.Adapter all = new ArrayList<>(); private List items = new ArrayList<>(); private NumberFormat NF = NumberFormat.getNumberInstance(); @@ -276,7 +278,7 @@ public class AdapterNavAccountFolder extends RecyclerView.Adapter accounts, boolean expanded) { + public void set(@NonNull List accounts, boolean expanded, boolean folders) { Log.i("Set nav accounts=" + accounts.size()); if (accounts.size() > 0) { @@ -328,6 +330,14 @@ public class AdapterNavAccountFolder extends RecyclerView.Adapter(); + for (TupleAccountFolder item : all) + if (item.folderName == null) + accounts.add(item); + } + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, accounts), false); this.expanded = expanded; @@ -362,6 +372,20 @@ public class AdapterNavAccountFolder extends RecyclerView.Adapter prev = new ArrayList<>(); private List next = new ArrayList<>(); diff --git a/app/src/main/res/drawable/expander3.xml b/app/src/main/res/drawable/expander3.xml new file mode 100644 index 0000000000..e75f41cc1e --- /dev/null +++ b/app/src/main/res/drawable/expander3.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/drawable/twotone_unfold_less_24.xml b/app/src/main/res/drawable/twotone_unfold_less_24.xml new file mode 100644 index 0000000000..c6e7907830 --- /dev/null +++ b/app/src/main/res/drawable/twotone_unfold_less_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/include_nav.xml b/app/src/main/res/layout/include_nav.xml index 3f57e77979..77800b197e 100644 --- a/app/src/main/res/layout/include_nav.xml +++ b/app/src/main/res/layout/include_nav.xml @@ -107,7 +107,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/vSeparatorOptions" - app:srcCompat="@drawable/expander" /> + app:srcCompat="@drawable/expander3" />