From 3bf872bdfd87e4fdbbeb8c6730cf485fd1515c3b Mon Sep 17 00:00:00 2001 From: str4d Date: Fri, 19 Sep 2014 13:38:49 +0000 Subject: [PATCH] Split out authentication into abstract class --- .../i2p/bote/android/EmailListFragment.java | 72 ++----------- .../util/AuthenticatedListFragment.java | 100 ++++++++++++++++++ app/src/main/res/menu/authenticated_list.xml | 21 ++++ app/src/main/res/menu/email_list.xml | 16 --- 4 files changed, 129 insertions(+), 80 deletions(-) create mode 100644 app/src/main/java/i2p/bote/android/util/AuthenticatedListFragment.java create mode 100644 app/src/main/res/menu/authenticated_list.xml diff --git a/app/src/main/java/i2p/bote/android/EmailListFragment.java b/app/src/main/java/i2p/bote/android/EmailListFragment.java index ae59061..e6990cc 100644 --- a/app/src/main/java/i2p/bote/android/EmailListFragment.java +++ b/app/src/main/java/i2p/bote/android/EmailListFragment.java @@ -7,7 +7,6 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.support.v4.app.DialogFragment; -import android.support.v4.app.ListFragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.support.v7.app.ActionBarActivity; @@ -32,6 +31,7 @@ import javax.mail.Flags.Flag; import javax.mail.MessagingException; import i2p.bote.I2PBote; +import i2p.bote.android.util.AuthenticatedListFragment; import i2p.bote.android.util.BetterAsyncTaskLoader; import i2p.bote.android.util.BoteHelper; import i2p.bote.android.util.MoveToDialogFragment; @@ -45,7 +45,7 @@ import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh; import uk.co.senab.actionbarpulltorefresh.library.Options; import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener; -public class EmailListFragment extends ListFragment implements +public class EmailListFragment extends AuthenticatedListFragment implements LoaderManager.LoaderCallbacks>, MoveToDialogFragment.MoveToDialogListener, EmailListAdapter.EmailSelector, OnRefreshListener { @@ -61,8 +61,6 @@ public class EmailListFragment extends ListFragment implements private EmailListAdapter mAdapter; private EmailFolder mFolder; - private MenuItem mLogIn; - private MenuItem mClearPassword; private MenuItem mNewEmail; // The Controller which provides CHOICE_MODE_MULTIPLE_MODAL-like functionality @@ -96,12 +94,6 @@ public class EmailListFragment extends ListFragment implements } } - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setHasOptionsMenu(true); - } - @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -164,31 +156,13 @@ public class EmailListFragment extends ListFragment implements } } - @Override - public void onResume() { - super.onResume(); - - if (mFolder != null) { - if (I2PBote.getInstance().isPasswordRequired()) { - // Ensure any existing data is destroyed. - destroyList(); - } else { - // Password is cached, or not set. - initializeList(); - } - } - - getActivity().supportInvalidateOptionsMenu(); - } - - 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) + protected void onInitializeList() { + if (mFolder == null) return; int numIncompleteEmails = I2PBote.getInstance().getNumIncompleteEmails(); @@ -204,21 +178,15 @@ 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() { + protected void onDestroyList() { if (mNumIncompleteEmails != null) { getListView().removeHeaderView(mNumIncompleteEmails); mNumIncompleteEmails = null; } - setEmptyText(getResources().getString( - R.string.touch_lock_to_log_in)); getLoaderManager().destroyLoader(EMAIL_LIST_LOADER); - - listInitialized = false; } @Override @@ -233,44 +201,20 @@ public class EmailListFragment extends ListFragment implements @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.email_list, menu); - mLogIn = menu.findItem(R.id.action_log_in); - mClearPassword = menu.findItem(R.id.action_log_out); mNewEmail = menu.findItem(R.id.action_new_email); } @Override public void onPrepareOptionsMenu(Menu menu) { - boolean passwordRequired = I2PBote.getInstance().isPasswordRequired(); - mLogIn.setVisible(passwordRequired); - mNewEmail.setVisible(!passwordRequired); - mClearPassword.setVisible(I2PBote.getInstance().isPasswordInCache()); + super.onPrepareOptionsMenu(menu); + mNewEmail.setVisible(!I2PBote.getInstance().isPasswordRequired()); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.action_log_in: - // Request a password from the user. - BoteHelper.requestPassword(getActivity(), new BoteHelper.RequestPasswordListener() { - @Override - public void onPasswordVerified() { - initializeList(); - getActivity().supportInvalidateOptionsMenu(); - } - - @Override - public void onPasswordCanceled() { - } - }); - return true; - - case R.id.action_log_out: - BoteHelper.clearPassword(); - destroyList(); - getActivity().supportInvalidateOptionsMenu(); - return true; - case R.id.action_new_email: startNewEmail(); return true; diff --git a/app/src/main/java/i2p/bote/android/util/AuthenticatedListFragment.java b/app/src/main/java/i2p/bote/android/util/AuthenticatedListFragment.java new file mode 100644 index 0000000..f888028 --- /dev/null +++ b/app/src/main/java/i2p/bote/android/util/AuthenticatedListFragment.java @@ -0,0 +1,100 @@ +package i2p.bote.android.util; + +import android.os.Bundle; +import android.support.v4.app.ListFragment; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; + +import i2p.bote.I2PBote; +import i2p.bote.android.R; + +public abstract class AuthenticatedListFragment extends ListFragment { + private MenuItem mLogIn; + private MenuItem mClearPassword; + private boolean mListInitialized; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public void onResume() { + super.onResume(); + + if (I2PBote.getInstance().isPasswordRequired()) { + // Ensure any existing data is destroyed. + destroyList(); + } else { + // Password is cached, or not set. + initializeList(); + } + + getActivity().supportInvalidateOptionsMenu(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.authenticated_list, menu); + mLogIn = menu.findItem(R.id.action_log_in); + mClearPassword = menu.findItem(R.id.action_log_out); + } + + @Override + public void onPrepareOptionsMenu(Menu menu) { + mLogIn.setVisible(I2PBote.getInstance().isPasswordRequired()); + mClearPassword.setVisible(I2PBote.getInstance().isPasswordInCache()); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_log_in: + // Request a password from the user. + BoteHelper.requestPassword(getActivity(), new BoteHelper.RequestPasswordListener() { + @Override + public void onPasswordVerified() { + initializeList(); + getActivity().supportInvalidateOptionsMenu(); + } + + @Override + public void onPasswordCanceled() { + } + }); + return true; + + case R.id.action_log_out: + BoteHelper.clearPassword(); + destroyList(); + getActivity().supportInvalidateOptionsMenu(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + protected void initializeList() { + if (mListInitialized) + return; + + onInitializeList(); + + mListInitialized = true; + } + + protected void destroyList() { + onDestroyList(); + + setEmptyText(getResources().getString( + R.string.touch_lock_to_log_in)); + + mListInitialized = false; + } + + protected abstract void onInitializeList(); + protected abstract void onDestroyList(); +} diff --git a/app/src/main/res/menu/authenticated_list.xml b/app/src/main/res/menu/authenticated_list.xml new file mode 100644 index 0000000..8a60c6e --- /dev/null +++ b/app/src/main/res/menu/authenticated_list.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/email_list.xml b/app/src/main/res/menu/email_list.xml index 1eecc7d..e3ed578 100644 --- a/app/src/main/res/menu/email_list.xml +++ b/app/src/main/res/menu/email_list.xml @@ -2,22 +2,6 @@ - - - -