Split out authentication into abstract class

This commit is contained in:
str4d
2014-09-19 13:38:49 +00:00
parent 3eb46d9faf
commit 3bf872bdfd
4 changed files with 129 additions and 80 deletions

View File

@@ -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<List<Email>>,
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;

View File

@@ -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();
}

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:i2pandroid="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_log_in"
android:icon="@drawable/ic_device_access_secure"
android:orderInCategory="1"
android:title="@string/log_in"
android:visible="false"
i2pandroid:showAsAction="always"/>
<item
android:id="@+id/action_log_out"
android:icon="@drawable/ic_device_access_not_secure"
android:orderInCategory="1"
android:title="@string/log_out"
android:visible="false"
i2pandroid:showAsAction="always"/>
</menu>

View File

@@ -2,22 +2,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:i2pandroid="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_log_in"
android:icon="@drawable/ic_device_access_secure"
android:orderInCategory="1"
android:title="@string/log_in"
android:visible="false"
i2pandroid:showAsAction="always"/>
<item
android:id="@+id/action_log_out"
android:icon="@drawable/ic_device_access_not_secure"
android:orderInCategory="2"
android:title="@string/log_out"
android:visible="false"
i2pandroid:showAsAction="always"/>
<item
android:id="@+id/action_new_email"
android:icon="@drawable/ic_content_new_email"