From 6747aba11272ee3d7870cab7bfe86a59b0b03bec Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 11 Aug 2021 09:31:00 +0200 Subject: [PATCH] Added icon nav menu --- .../java/eu/faircode/email/ActivitySetup.java | 2 +- .../java/eu/faircode/email/ActivityView.java | 53 +++++++++++++++---- .../eu/faircode/email/AdapterNavAccount.java | 26 +++++++-- .../eu/faircode/email/AdapterNavFolder.java | 21 ++++++-- .../eu/faircode/email/AdapterNavMenu.java | 24 ++++++--- .../eu/faircode/email/AdapterNavUnified.java | 14 +++-- .../java/eu/faircode/email/NavMenuItem.java | 3 +- app/src/main/res/layout/include_nav.xml | 12 ++++- app/src/main/res/layout/item_nav.xml | 1 + 9 files changed, 125 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 94ef6ba49e..102415ec30 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -294,7 +294,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac } }).setSubtitle(BuildConfig.VERSION_NAME)); - adapter.set(menus); + adapter.set(menus, true); getSupportFragmentManager().addOnBackStackChangedListener(this); diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index c31f8bbb4f..6a6f04bde1 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -97,6 +97,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB private DrawerLayoutEx drawerLayout; private ActionBarDrawerToggle drawerToggle; private NestedScrollView drawerContainer; + private ImageButton ibExpanderNav; private ImageButton ibExpanderAccount; private RecyclerView rvAccount; private ImageButton ibExpanderUnified; @@ -108,6 +109,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB private ImageButton ibExpanderExtra; private RecyclerView rvMenuExtra; + private boolean expanded; private AdapterNavAccount adapterNavAccount; private AdapterNavUnified adapterNavUnified; private AdapterNavFolder adapterNavFolder; @@ -261,12 +263,15 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB drawerContainer = findViewById(R.id.drawer_container); int drawerWidth; + final boolean nav_fixed; DisplayMetrics dm = getResources().getDisplayMetrics(); - if (viewId == R.layout.activity_view_landscape_split && landscape3) + if (viewId == R.layout.activity_view_landscape_split && landscape3) { drawerWidth = Helper.dp2pixels(this, 300); - else if (viewId != R.layout.activity_view_landscape_split && portrait3) + nav_fixed = true; + } else if (viewId != R.layout.activity_view_landscape_split && portrait3) { drawerWidth = Math.min(Helper.dp2pixels(this, 300), dm.widthPixels / 2); - else { + nav_fixed = true; + } else { int actionBarHeight; TypedValue tv = new TypedValue(); if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) @@ -277,12 +282,42 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB int screenWidth = Math.min(dm.widthPixels, dm.heightPixels); int dp320 = Helper.dp2pixels(this, 320); drawerWidth = Math.min(screenWidth - actionBarHeight, dp320); + nav_fixed = false; } + int dp48 = Helper.dp2pixels(this, 48); + expanded = (!nav_fixed || prefs.getBoolean("nav_expanded", true)); + ViewGroup.LayoutParams lparam = drawerContainer.getLayoutParams(); - lparam.width = drawerWidth; + lparam.width = (expanded ? drawerWidth : dp48); drawerContainer.setLayoutParams(lparam); + // Navigation expander + ibExpanderNav = drawerContainer.findViewById(R.id.ibExpanderNav); + ibExpanderNav.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + expanded = !expanded; + prefs.edit().putBoolean("nav_expanded", expanded).apply(); + + lparam.width = (expanded ? drawerWidth : dp48); + drawerContainer.setLayoutParams(lparam); + + if (nav_fixed) + childContent.setPaddingRelative(childDrawer.getLayoutParams().width, 0, 0, 0); + + ibExpanderNav.setImageLevel(expanded ? 0 : 1); + + adapterNavAccount.setExpanded(expanded); + adapterNavUnified.setExpanded(expanded); + adapterNavFolder.setExpanded(expanded); + adapterNavMenu.setExpanded(expanded); + adapterNavMenuExtra.setExpanded(expanded); + } + }); + ibExpanderNav.setImageLevel(expanded ? 0 : 1); + ibExpanderNav.setVisibility(nav_fixed ? View.VISIBLE : View.GONE); + // Accounts ibExpanderAccount = drawerContainer.findViewById(R.id.ibExpanderAccount); @@ -526,7 +561,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB } })); - adapterNavMenu.set(menus); + adapterNavMenu.set(menus, expanded); // Collapsible menus @@ -629,7 +664,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB } }).setExternal(true)); - adapterNavMenuExtra.set(extra); + adapterNavMenuExtra.set(extra, expanded); // Live data @@ -640,7 +675,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB public void onChanged(@Nullable List accounts) { if (accounts == null) accounts = new ArrayList<>(); - adapterNavAccount.set(accounts); + adapterNavAccount.set(accounts, expanded); } }); @@ -649,7 +684,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB public void onChanged(List folders) { if (folders == null) folders = new ArrayList<>(); - adapterNavUnified.set(folders); + adapterNavUnified.set(folders, expanded); } }); @@ -658,7 +693,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB public void onChanged(List folders) { if (folders == null) folders = new ArrayList<>(); - adapterNavFolder.set(folders); + adapterNavFolder.set(folders, expanded); } }); diff --git a/app/src/main/java/eu/faircode/email/AdapterNavAccount.java b/app/src/main/java/eu/faircode/email/AdapterNavAccount.java index e1e9460fe0..cc89744be4 100644 --- a/app/src/main/java/eu/faircode/email/AdapterNavAccount.java +++ b/app/src/main/java/eu/faircode/email/AdapterNavAccount.java @@ -22,6 +22,7 @@ package eu.faircode.email; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; import android.view.LayoutInflater; @@ -54,7 +55,9 @@ public class AdapterNavAccount extends RecyclerView.Adapter items = new ArrayList<>(); private NumberFormat NF = NumberFormat.getNumberInstance(); @@ -116,8 +119,10 @@ public class AdapterNavAccount extends RecyclerView.Adapter QUOTA_WARNING) { ivWarning.setEnabled(true); ivWarning.setImageResource(R.drawable.twotone_disc_full_24); - ivWarning.setVisibility(View.VISIBLE); - } else + ivWarning.setVisibility(expanded ? View.VISIBLE : View.GONE); + view.setBackgroundColor(expanded ? Color.TRANSPARENT : colorWarning); + } else { ivWarning.setVisibility(View.GONE); + view.setBackgroundColor(Color.TRANSPARENT); + } } @Override @@ -211,13 +220,14 @@ public class AdapterNavAccount extends RecyclerView.Adapter accounts) { + public void set(@NonNull List accounts, boolean expanded) { Log.i("Set nav accounts=" + accounts.size()); if (accounts.size() > 0) @@ -225,7 +235,8 @@ public class AdapterNavAccount extends RecyclerView.Adapter prev = new ArrayList<>(); private List next = new ArrayList<>(); diff --git a/app/src/main/java/eu/faircode/email/AdapterNavFolder.java b/app/src/main/java/eu/faircode/email/AdapterNavFolder.java index 262e5566ef..2e89a2bc2a 100644 --- a/app/src/main/java/eu/faircode/email/AdapterNavFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterNavFolder.java @@ -22,6 +22,7 @@ package eu.faircode.email; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.graphics.Color; import android.graphics.Typeface; import android.view.LayoutInflater; import android.view.View; @@ -52,7 +53,9 @@ public class AdapterNavFolder extends RecyclerView.Adapter items = new ArrayList<>(); private NumberFormat NF = NumberFormat.getNumberInstance(); @@ -126,12 +129,14 @@ public class AdapterNavFolder extends RecyclerView.Adapter folders) { - Log.i("Set nav folders=" + folders.size()); + public void set(@NonNull List folders, boolean expanded) { + Log.i("Set nav folders=" + folders.size() + " expanded=" + expanded); if (folders.size() > 0) Collections.sort(folders, folders.get(0).getComparator(context)); DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, folders), false); - items = folders; + this.expanded = expanded; + this.items = folders; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -204,6 +210,11 @@ public class AdapterNavFolder extends RecyclerView.Adapter prev = new ArrayList<>(); private List next = new ArrayList<>(); diff --git a/app/src/main/java/eu/faircode/email/AdapterNavMenu.java b/app/src/main/java/eu/faircode/email/AdapterNavMenu.java index cc31974dab..2f6120a57f 100644 --- a/app/src/main/java/eu/faircode/email/AdapterNavMenu.java +++ b/app/src/main/java/eu/faircode/email/AdapterNavMenu.java @@ -22,6 +22,7 @@ package eu.faircode.email; import android.content.Context; import android.content.SharedPreferences; import android.content.res.ColorStateList; +import android.graphics.Color; import android.graphics.Typeface; import android.view.LayoutInflater; import android.view.View; @@ -48,7 +49,9 @@ public class AdapterNavMenu extends RecyclerView.Adapter items = new ArrayList<>(); private NumberFormat NF = NumberFormat.getNumberInstance(); @@ -96,13 +99,15 @@ public class AdapterNavMenu extends RecyclerView.Adapter menus) { - Log.i("Set nav menus=" + menus.size()); + public void set(@NonNull List menus, boolean expanded) { + Log.i("Set nav menus=" + menus.size() + " expanded=" + expanded); DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, menus), false); - items = menus; + this.expanded = expanded; + this.items = menus; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -172,6 +179,11 @@ public class AdapterNavMenu extends RecyclerView.Adapter items = new ArrayList<>(); private NumberFormat NF = NumberFormat.getNumberInstance(); @@ -103,9 +104,10 @@ public class AdapterNavUnified extends RecyclerView.Adapter types) { + public void set(@NonNull List types, boolean expanded) { Log.i("Set nav unified=" + types.size()); Collections.sort(types, new Comparator() { @@ -155,7 +157,8 @@ public class AdapterNavUnified extends RecyclerView.Adapter prev = new ArrayList<>(); private List next = new ArrayList<>(); diff --git a/app/src/main/java/eu/faircode/email/NavMenuItem.java b/app/src/main/java/eu/faircode/email/NavMenuItem.java index c9017cd2d9..a9fbbeb39d 100644 --- a/app/src/main/java/eu/faircode/email/NavMenuItem.java +++ b/app/src/main/java/eu/faircode/email/NavMenuItem.java @@ -72,8 +72,9 @@ public class NavMenuItem { return this; } - void setWarning(boolean warning) { + NavMenuItem setWarning(boolean warning) { this.warning = warning; + return this; } NavMenuItem setSeparated() { diff --git a/app/src/main/res/layout/include_nav.xml b/app/src/main/res/layout/include_nav.xml index 45efd7e525..6487f7fd1c 100644 --- a/app/src/main/res/layout/include_nav.xml +++ b/app/src/main/res/layout/include_nav.xml @@ -5,6 +5,16 @@ android:layout_height="wrap_content" android:animateLayoutChanges="false"> + +