diff --git a/res/layout/dialog_password.xml b/res/layout/dialog_password.xml
index 3f4b67a..204de96 100644
--- a/res/layout/dialog_password.xml
+++ b/res/layout/dialog_password.xml
@@ -20,4 +20,10 @@
+
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0cdf02b..1cf4f9b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -8,6 +8,7 @@
Close nav
Enter password:
+ Checking password…
Password was incorrect
Could not read password verification file
Not authenticated
diff --git a/src/i2p/bote/EmailListFragment.java b/src/i2p/bote/EmailListFragment.java
index 7e906c8..bb1fb6f 100644
--- a/src/i2p/bote/EmailListFragment.java
+++ b/src/i2p/bote/EmailListFragment.java
@@ -15,8 +15,10 @@ import i2p.bote.util.BetterAsyncTaskLoader;
import i2p.bote.util.BoteHelper;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager;
@@ -25,6 +27,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
+import android.widget.TextView;
public class EmailListFragment extends ListFragment implements
LoaderManager.LoaderCallbacks> {
@@ -37,6 +40,9 @@ public class EmailListFragment extends ListFragment implements
private EmailListAdapter mAdapter;
private EmailFolder mFolder;
+ private EditText mPasswordInput;
+ private TextView mPasswordError;
+
public static EmailListFragment newInstance(String folderName) {
EmailListFragment f = new EmailListFragment();
Bundle args = new Bundle();
@@ -98,25 +104,14 @@ public class EmailListFragment extends ListFragment implements
View promptView = li.inflate(R.layout.dialog_password, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(promptView);
- final EditText input = (EditText) promptView.findViewById(R.id.passwordInput);
+ mPasswordInput = (EditText) promptView.findViewById(R.id.passwordInput);
+ mPasswordError = (TextView) promptView.findViewById(R.id.passwordError);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
- try {
- if (BoteHelper.tryPassword(input.getText().toString()))
- initializeList();
- else
- setEmptyText(getResources().getString(
- R.string.password_incorrect));
- } catch (IOException e) {
- setEmptyText(getResources().getString(
- R.string.password_file_error));
- } catch (GeneralSecurityException e) {
- setEmptyText(getResources().getString(
- R.string.password_file_error));
- }
dialog.dismiss();
+ new PasswordWaiter().execute();
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
@@ -130,6 +125,49 @@ public class EmailListFragment extends ListFragment implements
passwordDialog.show();
}
+ private class PasswordWaiter extends AsyncTask {
+ private final ProgressDialog dialog = new ProgressDialog(EmailListFragment.this.getActivity());
+
+ protected void onPreExecute() {
+ dialog.setMessage(getResources().getString(
+ R.string.checking_password));
+ dialog.setCancelable(false);
+ dialog.show();
+ }
+
+ protected String doInBackground(Void... params) {
+ try {
+ if (BoteHelper.tryPassword(mPasswordInput.getText().toString()))
+ return null;
+ else {
+ cancel(false);
+ return getResources().getString(
+ R.string.password_incorrect);
+ }
+ } catch (IOException e) {
+ cancel(false);
+ return getResources().getString(
+ R.string.password_file_error);
+ } catch (GeneralSecurityException e) {
+ cancel(false);
+ return getResources().getString(
+ R.string.password_file_error);
+ }
+ }
+
+ protected void onCancelled(String result) {
+ dialog.dismiss();
+ requestPassword();
+ mPasswordError.setText(result);
+ }
+
+ protected void onPostExecute(String result) {
+ // Password is valid
+ initializeList();
+ dialog.dismiss();
+ }
+ }
+
/**
* Start loading the list of emails from this folder.
* Only called when we have a password cached, or no