Split out authentication into abstract class
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
21
app/src/main/res/menu/authenticated_list.xml
Normal file
21
app/src/main/res/menu/authenticated_list.xml
Normal 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>
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user