From 1059049e82b8b26efed60e0d575ea75c4acd1824 Mon Sep 17 00:00:00 2001 From: str4d Date: Sun, 17 Aug 2014 12:40:46 +0000 Subject: [PATCH] Password handling: - Init lists once in onResume (handles passwords entered higher in stack) - Destroy any existing data in UI if cached password is cleared --- .../i2p/bote/android/EmailListFragment.java | 32 +++++++++++++++++-- .../addressbook/AddressBookFragment.java | 22 +++++++++++-- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/i2p/bote/android/EmailListFragment.java b/app/src/main/java/i2p/bote/android/EmailListFragment.java index d7c50c1..4637600 100644 --- a/app/src/main/java/i2p/bote/android/EmailListFragment.java +++ b/app/src/main/java/i2p/bote/android/EmailListFragment.java @@ -157,7 +157,17 @@ public class EmailListFragment extends ListFragment implements } else { getActivity().setTitle( BoteHelper.getFolderDisplayName(getActivity(), mFolder)); + } + } + + @Override + public void onResume() { + super.onResume(); + + if (mFolder != null) { if (I2PBote.getInstance().isPasswordRequired()) { + // Ensure any existing data is destroyed. + destroyList(); // Request a password from the user. BoteHelper.requestPassword(getActivity(), new BoteHelper.RequestPasswordListener() { @Override @@ -167,8 +177,6 @@ public class EmailListFragment extends ListFragment implements @Override public void onPasswordCanceled() { - setEmptyText(getResources().getString( - R.string.not_authed)); } }); } else { @@ -178,12 +186,16 @@ public class EmailListFragment extends ListFragment implements } } + private boolean listInitialized; /** * Start loading the list of emails from this folder. * Only called when we have a password cached, or no * password is required. */ private void initializeList() { + if (listInitialized) + return; + int numIncompleteEmails = I2PBote.getInstance().getNumIncompleteEmails(); if (numIncompleteEmails > 0) { mNumIncompleteEmails = new TextView(getActivity()); @@ -197,6 +209,21 @@ public class EmailListFragment extends ListFragment implements setEmptyText(getResources().getString( R.string.folder_empty)); getLoaderManager().initLoader(EMAIL_LIST_LOADER, null, this); + + listInitialized = true; + } + + private void destroyList() { + if (mNumIncompleteEmails != null) { + getListView().removeHeaderView(mNumIncompleteEmails); + mNumIncompleteEmails = null; + } + + setEmptyText(getResources().getString( + R.string.not_authed)); + getLoaderManager().destroyLoader(EMAIL_LIST_LOADER); + + listInitialized = false; } @Override @@ -222,7 +249,6 @@ public class EmailListFragment extends ListFragment implements BoteHelper.requestPassword(getActivity(), new BoteHelper.RequestPasswordListener() { @Override public void onPasswordVerified() { - initializeList(); startNewEmail(); } diff --git a/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java b/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java index bbe5388..8406c88 100644 --- a/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java +++ b/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java @@ -58,8 +58,15 @@ public class AddressBookFragment extends ListFragment implements mAdapter = new ContactAdapter(getActivity()); setListAdapter(mAdapter); + } + + @Override + public void onResume() { + super.onResume(); if (I2PBote.getInstance().isPasswordRequired()) { + // Ensure any existing data is destroyed. + destroyList(); // Request a password from the user. BoteHelper.requestPassword(getActivity(), new BoteHelper.RequestPasswordListener() { @Override @@ -69,8 +76,6 @@ public class AddressBookFragment extends ListFragment implements @Override public void onPasswordCanceled() { - setEmptyText(getResources().getString( - R.string.not_authed)); } }); } else { @@ -79,16 +84,28 @@ public class AddressBookFragment extends ListFragment implements } } + private boolean listInitialized; /** * Start loading the address book. * Only called when we have a password cached, or no * password is required. */ private void initializeList() { + if (listInitialized) + return; + setListShown(false); setEmptyText(getResources().getString( R.string.address_book_empty)); getLoaderManager().initLoader(0, null, this); + + listInitialized = true; + } + + private void destroyList() { + setEmptyText(getResources().getString( + R.string.not_authed)); + getLoaderManager().destroyLoader(0); } @Override @@ -104,7 +121,6 @@ public class AddressBookFragment extends ListFragment implements BoteHelper.requestPassword(getActivity(), new BoteHelper.RequestPasswordListener() { @Override public void onPasswordVerified() { - initializeList(); startNewContact(); }