From f1f17806b642da44fd0d6a3809fa85ca04e68457 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 23 Jan 2020 15:27:26 +0100 Subject: [PATCH] Build nav menu in post create --- .../java/eu/faircode/email/ActivityView.java | 156 +++++++++--------- 1 file changed, 82 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index b53737cd64..cf9c46c8c7 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -102,6 +102,12 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB private RecyclerView rvMenuExtra; private Group grpUnified; + private AdapterNavAccount adapterNavAccount; + private AdapterNavUnified adapterNavUnified; + private AdapterNavFolder adapterNavFolder; + private AdapterNavMenu adapterNavMenu; + private AdapterNavMenu adapterNavMenuExtra; + private boolean exit = false; private boolean searching = false; @@ -194,8 +200,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB // Accounts rvAccount = drawerContainer.findViewById(R.id.rvAccount); rvAccount.setLayoutManager(new LinearLayoutManager(this)); - final AdapterNavAccount aadapter = new AdapterNavAccount(this, this); - rvAccount.setAdapter(aadapter); + adapterNavAccount = new AdapterNavAccount(this, this); + rvAccount.setAdapter(adapterNavAccount); // Unified system folders ibExpanderUnified = drawerContainer.findViewById(R.id.ibExpanderUnified); @@ -206,8 +212,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB rvUnified = drawerContainer.findViewById(R.id.rvUnified); rvUnified.setLayoutManager(new LinearLayoutManager(this)); - final AdapterNavUnified uadapter = new AdapterNavUnified(this, this); - rvUnified.setAdapter(uadapter); + adapterNavUnified = new AdapterNavUnified(this, this); + rvUnified.setAdapter(adapterNavUnified); boolean unified_system = prefs.getBoolean("unified_system", true); ibExpanderUnified.setImageLevel(unified_system ? 0 /* less */ : 1 /* more */); @@ -226,13 +232,13 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB // Navigation folders rvFolder = drawerContainer.findViewById(R.id.rvFolder); rvFolder.setLayoutManager(new LinearLayoutManager(this)); - final AdapterNavFolder fadapter = new AdapterNavFolder(this, this); - rvFolder.setAdapter(fadapter); + adapterNavFolder = new AdapterNavFolder(this, this); + rvFolder.setAdapter(adapterNavFolder); rvMenu = drawerContainer.findViewById(R.id.rvMenu); rvMenu.setLayoutManager(new LinearLayoutManager(this)); - final AdapterNavMenu madapter = new AdapterNavMenu(this, this); - rvMenu.setAdapter(madapter); + adapterNavMenu = new AdapterNavMenu(this, this); + rvMenu.setAdapter(adapterNavMenu); // Extra menus ibExpanderExtra = drawerContainer.findViewById(R.id.ibExpanderExtra); @@ -240,15 +246,15 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB rvMenuExtra = drawerContainer.findViewById(R.id.rvMenuExtra); LinearLayoutManager llm = new LinearLayoutManager(this); rvMenuExtra.setLayoutManager(llm); - final AdapterNavMenu eadapter = new AdapterNavMenu(this, this); - rvMenuExtra.setAdapter(eadapter); + adapterNavMenuExtra = new AdapterNavMenu(this, this); + rvMenuExtra.setAdapter(adapterNavMenuExtra); final Drawable d = getDrawable(R.drawable.divider); DividerItemDecoration itemDecorator = new DividerItemDecoration(this, llm.getOrientation()) { @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { int pos = parent.getChildAdapterPosition(view); - NavMenuItem menu = eadapter.get(pos); + NavMenuItem menu = adapterNavMenuExtra.get(pos); outRect.set(0, 0, 0, menu != null && menu.isSeparated() ? d.getIntrinsicHeight() : 0); } }; @@ -278,6 +284,65 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB getSupportFragmentManager().addOnBackStackChangedListener(this); + // Initialize + + if (content_pane != null) { + content_separator.setVisibility(View.GONE); + content_pane.setVisibility(View.GONE); + } + + if (getSupportFragmentManager().getFragments().size() == 0 && + !getIntent().hasExtra(Intent.EXTRA_PROCESS_TEXT)) + init(); + + if (savedInstanceState != null) + drawerToggle.setDrawerIndicatorEnabled(savedInstanceState.getBoolean("fair:toggle")); + + checkFirst(); + checkCrash(); + } + + private void init() { + Bundle args = new Bundle(); + + FragmentBase fragment; + switch (startup) { + case "accounts": + fragment = new FragmentAccounts(); + args.putBoolean("settings", false); + break; + case "folders": + fragment = new FragmentFolders(); + break; + default: + fragment = new FragmentMessages(); + } + + fragment.setArguments(args); + + FragmentManager fm = getSupportFragmentManager(); + FragmentTransaction fragmentTransaction = fm.beginTransaction(); + for (Fragment existing : fm.getFragments()) + fragmentTransaction.remove(existing); + fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("unified"); + fragmentTransaction.commit(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + outState.putBoolean("fair:toggle", drawerToggle.isDrawerIndicatorEnabled()); + outState.putBoolean("fair:searching", searching); + super.onSaveInstanceState(outState); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + drawerLayout.setup(getResources().getConfiguration(), drawerContainer, drawerToggle); + drawerToggle.syncState(); + + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + // Fixed menus PackageManager pm = getPackageManager(); @@ -321,7 +386,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB } })); - madapter.set(menus); + adapterNavMenu.set(menus); // Collapsible menus @@ -446,7 +511,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB } }).setExternal(true)); - eadapter.set(extra); + adapterNavMenuExtra.set(extra); // Live data @@ -457,7 +522,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB public void onChanged(@Nullable List accounts) { if (accounts == null) accounts = new ArrayList<>(); - aadapter.set(accounts); + adapterNavAccount.set(accounts); } }); @@ -469,7 +534,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB ibExpanderUnified.setVisibility(folders.size() > 0 ? View.VISIBLE : View.GONE); boolean unified_system = prefs.getBoolean("unified_system", true); grpUnified.setVisibility(unified_system && folders.size() > 0 ? View.VISIBLE : View.GONE); - uadapter.set(folders); + adapterNavUnified.set(folders); } }); @@ -478,7 +543,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB public void onChanged(List folders) { if (folders == null) folders = new ArrayList<>(); - fadapter.set(folders); + adapterNavFolder.set(folders); } }); @@ -487,70 +552,13 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB public void onChanged(TupleOperationStats stats) { navOperations.setWarning(stats != null && stats.errors != null && stats.errors > 0); navOperations.setCount(stats == null ? 0 : stats.pending); - madapter.notifyDataSetChanged(); + adapterNavMenu.notifyDataSetChanged(); } }); - // Initialize - - if (content_pane != null) { - content_separator.setVisibility(View.GONE); - content_pane.setVisibility(View.GONE); - } - - if (getSupportFragmentManager().getFragments().size() == 0 && - !getIntent().hasExtra(Intent.EXTRA_PROCESS_TEXT)) - init(); - - if (savedInstanceState != null) - drawerToggle.setDrawerIndicatorEnabled(savedInstanceState.getBoolean("fair:toggle")); - - checkFirst(); - checkCrash(); - Shortcuts.update(this, this); } - private void init() { - Bundle args = new Bundle(); - - FragmentBase fragment; - switch (startup) { - case "accounts": - fragment = new FragmentAccounts(); - args.putBoolean("settings", false); - break; - case "folders": - fragment = new FragmentFolders(); - break; - default: - fragment = new FragmentMessages(); - } - - fragment.setArguments(args); - - FragmentManager fm = getSupportFragmentManager(); - FragmentTransaction fragmentTransaction = fm.beginTransaction(); - for (Fragment existing : fm.getFragments()) - fragmentTransaction.remove(existing); - fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("unified"); - fragmentTransaction.commit(); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - outState.putBoolean("fair:toggle", drawerToggle.isDrawerIndicatorEnabled()); - outState.putBoolean("fair:searching", searching); - super.onSaveInstanceState(outState); - } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - drawerLayout.setup(getResources().getConfiguration(), drawerContainer, drawerToggle); - drawerToggle.syncState(); - } - @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent);